2014-09-30 84 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