2014-09-30 28 views
0

大家 我在另一个混乱。我需要用字符串中的日期和与他们的生日(日期)相对应的名称对数组进行排序。然后在表视图中查看它。有什么办法吗?排序数组与字符串中的日期无比较

+0

为什么你不想使用比较器?这是一个非常简单而强大的方法。 – 2014-09-30 07:04:48

+0

您应该将数据存储在最合适的数据类型中,在这种情况下应该是'NSDate'。这个问题将变得微不足道。 – Droppy 2014-09-30 07:06:21

回答

-1

NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@“MM/dd”];

sortedDataSource = [BdayArr sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) { 
    NSDate *d1 = [formatter dateFromString:obj1[kKeyDOB]]; 
    NSDate *d2 = [formatter dateFromString:obj2[kKeyDOB]]; 

    return [d1 compare:d2]; // ascending order 
    //return [d2 compare:d1]; // descending order 
}]; 

NSLog(@"%@",sortedDataSource); 
} 
+0

糟糕的解决方案,因为过度转换为'NSDate'。为什么不首先保存'NSDate'对象的列表? – Droppy 2014-09-30 14:36:10

0

使用此功能按生日排序。并根据您的要求制定条件。

-(void)sortAllDate:(NSMutableArray *)arrayToSort 
    { 
     NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" 
                    ascending:YES]; 
     NSArray *descriptors = [NSArray arrayWithObject:descriptor]; 
     NSArray *reverseOrder = [arrayToSort sortedArrayUsingDescriptors:descriptors]; 

     NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
     [formatter setDateFormat:@"MM-dd-yyyy"]; 

     NSMutableArray *temp = [[NSMutableArray alloc] init]; 

     for (int k=0; k<[reverseOrder count]; k++) { 

      for(int m=0;m<[frdArray count];m++) 
      { 
       NSString *dateStr = [NSString stringWithFormat:@"%@",[[frdArray objectAtIndex:m] birthday]]; 
       if([dateStr isEqualToString:[formatter stringFromDate:[reverseOrder objectAtIndex:k]]]) 
       { 

        [temp addObject:[frdArray objectAtIndex:m]]; 
       } 
      } 
     } 

     frdArray = temp; 

    } 
+0

您从最终数组中删除所有对象,然后重新分配它?为什么不只是'frdArray = temp;'? – Droppy 2014-09-30 07:07:37

+0

@Droppy ..我还有一些其他的代码也是因为我没有写在这里,因为没有必要回答这个问题。 – Max 2014-09-30 07:14:37

+0

我不明白你的意思。这两个陈述是次优的,应该改变。 – Droppy 2014-09-30 07:19:30