2009-10-23 4 views
3

이 배열을 고려하십시오. 키가 없으므로 NSSortDescriptor를 사용할 수 있는지 잘 모르겠습니다. 정렬하는 가장 좋은 방법은 무엇입니까?날짜 NSArray 정렬

(
    "Thursday, July 30, 2009", 
    "Monday, September 07, 2009", 
    "Wednesday, September 09, 2009", 
    "Friday, August 14, 2009", 
    "Saturday, September 05, 2009", 
    "Monday, August 10, 2009", 
    "Thursday, July 23, 2009", 
    "Monday, October 12, 2009", 
    "Friday, October 16, 2009", 
    "Monday, August 17, 2009", 
    "Tuesday, October 13, 2009", 
    "Wednesday, September 30, 2009", 
    "Sunday, August 16, 2009", 
    "Thursday, August 27, 2009", 
    "Monday, August 31, 2009", 
    "Saturday, August 15, 2009", 
    "Thursday, August 06, 2009", 
    "Saturday, September 26, 2009", 
    "Tuesday, September 29, 2009", 
    "Tuesday, September 15, 2009", 
    "Tuesday, September 01, 2009" 
) 

답변

12

당신은 여기에 몇 가지 예제 코드입니다 sortedArrayUsingFunction:

사용할 수 있습니다.

NSInteger dateSort(id s1, id s2, void *context) 
{ 
    NSDateFormatter* format = (NSDateFormatter*)context; 
    NSDate* d1 = [format dateFromString:s1]; 
    NSDate* d2 = [format dateFromString:s2]; 

    return [d1 compare:d2]; 
} 

... 

-(void)someObjectiveCMethod 
{ 
    NSDateFormatter* format = [[[NSDateFormatter alloc] init] autorelease]; 

    // Find theses format codes here: 
    // http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns 
    // 
    [format setDateFormat:@"EEEE, MMMM dd, yyyy"]; 

    NSArray* myArray = getMyArray(); 
    NSArray* sortedArray = [myArray sortedArrayUsingFunction:dateSort context:format]; 
} 

NSArray에는 number of these sorts of sort methods가 있습니다. 그것들을 숙지하는 사람들을 볼 가치가 있습니다.

+0

음 ... 실제로 목록을 정렬하지 않았습니다. 그것으로 파고들 것이다. –

+2

효율성을 위해서 someObjectiveCMethod에 NSDateFormatter를 만들고 컨텍스트 매개 변수로 전달하는 방법에 대해 논 하겠어요. 또는, 적어도, dateSort에서 autorelease를 사용하지 마십시오. –

+0

날짜 형식이 수정되었습니다. 미안해. (커피 필요). – nall

3
NSArray * unsortedDates = ...; 
NSArray * sortedDates = [unsortedDates sortedArrayUsingSelector:@selector(compare:)]; 
+0

아, 나는 NSDates가 아니라 NSStrings가 배열에있는 것처럼 보였습니다. NSDates가 있다면 Dave의 대답이 올바른 것입니다 (코드가 적다). – nall

+0

오, 이봐, 나는 그들이 문자열일지도 몰랐다. 나는 다른 방식으로 날짜를 저장하는 것이 꽤 좋을 것이기 때문에 날짜를 찾는 객체의 배열을 날짜로 가정했습니다. –

+0

예, 죄송합니다. 문자열이 nsdates가 아닙니다. –