Как отсортировать массив, содержащий даты в iphone SDK - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть массив, содержащий строки даты, такие как

"15.09.2011, 12:00:00", "15.10.2011, 12:00:00", "16.11.2011, 12:00:00 "

Как отсортировать этот массив в порядке убывания?Порядок должен быть таким: сначала отсортировать по году, затем по месяцу, затем по дате и времени.

Пожалуйста, поделитесь своими идеями.Спасибо

Ответы [ 5 ]

2 голосов
/ 23 сентября 2011

попробуйте приведенный ниже код. дата сортировки будет указана в порядке возрастания.

NSMutableArray *arraydate=[[NSMutableArray alloc] init];
[arraydate addObject:@"22/7/2010"];
[arraydate addObject:@"1/1/1988"];

[arraydate addObject:@"22/7/1966"];

[arraydate addObject:@"22/7/2000"];

[arraydate addObject:@"1/7/2010"];

[arraydate sortUsingSelector:@selector(compare:)];

NSLog(@"array=%@",[arraydate description]);
2 голосов
/ 23 сентября 2011

Сортировка NSDates , пока они находятся в формате NSString , практически невозможна, за исключением случаев, когда они имеют формат "YYYYMMddHHmmss" , который можно сортировать как сортировку строки. См. @ Daniel R Hicks ответ.

Преобразование строки в NSDate во время анализа и добавления дат из веб-службы.

NSString *dateStr = ...
NSDateFormatter *df = ;[NSDateFormatter alloc] init];
[df setDateFormat:@"M/dd/YYYY hh:mm:ss a"];

[datesArray addObject:[df dateFromString:dateStr]];

И сортировка,

[datesArray sortUsingSelector:@selector(compare:)];

И оригинальный ответ здесь!

1 голос
/ 23 сентября 2011

Если они уже являются строками, вы можете либо преобразовать их в NSDates (и, следовательно, в NSTimeIntervals) и отсортировать их, либо эффективно переставить цифры в YYMMDDHHmmss, где HH был преобразован в представление 00-23.

Либо можно сделать с помощью вызова sortUsingFunction.

0 голосов
/ 23 сентября 2011

Существует метод сравнения двух дат.

 int interval = [date1 compare:date2];

        if (interval == 1)
        {
            NSLog(@"Right hand side date is earlier");
        }
        else if (interval == -1)
        {
            NSLog(@"Left hand side date is earlier");
        }

        else 
        {
            NSLog(@"Both Dates are equal");
        }

вы можете использовать этот метод, но убедитесь, что ваши date1 и date2 являются объектами NSDate и после их сравнения вы можете использовать метод пузырьковой сортировки вместе с ним для сортировки массива.

0 голосов
/ 23 сентября 2011
static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |NSWidthInsensitiveSearch | NSForcedOrderingSearch;

    NSLocale *currentLocale = [NSLocale currentLocale];

    NSArray *sortArray = [iArray sortedArrayUsingComparator:^(id string1, id string2) {

        NSRange string1Range = NSMakeRange(0, [string1 length]);

        //if([string2 isEqualToString:@"#"])
            //return -1;

        return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];
    }];

    return sortArray;
...