Сортировка NSMutableSet - PullRequest
       46

Сортировка NSMutableSet

0 голосов
/ 13 марта 2012

Я должен использовать NSMutableSet для хранения своих строковых объектов.Я хочу хранить их в правильном порядке, например, от наименьшего к большему числу:

1
2
3
4

Как бы то ни было, если сделать это:

NSMutableSet *set = [[NSMutableSet alloc] init];
[set addObject:[NSString stringWithFormat:@"1"]];
[set addObject:[NSString stringWithFormat:@"2"]];
[set addObject:[NSString stringWithFormat:@"3"]];
[set addObject:[NSString stringWithFormat:@"4"]];
NSLog(@"set is %@",set);
[set release];

Я не получаю то, что хотел, но вместо этогоэто:

set is {(
    3,
    1,
    4,
    2
)}

Итак, я думаю, мне нужно отсортировать их, чтобы получить желаемый результат?Но на самом деле я не могу найти ни одного примера.

Может быть, кто-то может мне помочь в этом?

Спасибо.

РЕДАКТИРОВАТЬ: Я не могу использовать больше.Просто NSMutableSet или NSSet

Ответы [ 6 ]

3 голосов
/ 13 марта 2012

Как и все остальные, NSSet не определено по определению. Однако, если у вас есть для использования NSMutableSet, вы можете получить отсортированный массив из элементов, используя что-то вроде (при условии, что в этом случае элементы являются строками)

NSArray* unsorted = [mySet allObjects];
NSArray* sorted = [unsorted sortedArrayUsingComparator: ^(NSString* string1, NSString* string2)
                   {
                       return [string1 localizedCompare: string2];
                   }];
2 голосов
/ 13 марта 2012

Если есть какая-то особенность NSSet в том, что у них нет никакого заказа!

Вы должны использовать NSMutableArray для своих целей.

Читайте о коллекциях здесь, это вам поможет

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Collections/Collections.html#//apple_ref/doc/uid/10000034-BBCFIHFH

1 голос
/ 02 февраля 2013

попробуйте

NSMutableSet *set = [[NSMutableSet alloc] init];
[set addObject:[NSString stringWithFormat:@"1"]];
[set addObject:[NSString stringWithFormat:@"2"]];
[set addObject:[NSString stringWithFormat:@"3"]];
[set addObject:[NSString stringWithFormat:@"4"]];

NSLog(@"%@",set); // Output (3,1,4,2,5) ... all objects

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
NSArray *sortedArray = [set sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

NSLog(@"%@",sortedArray);
1 голос
/ 13 марта 2012

NSSet неупорядочен.Он должен содержать только уникальные элементы (без дубликатов).Из документов Apple NSSet:

... объявите программный интерфейс для неупорядоченной коллекции объектов.

Если вы хотите заказать, перейдитедля NSMutableArray или NSMutableOrderedSet.

0 голосов
/ 13 марта 2012

Наборы неупорядочены по определению.Вам нужен упорядоченный набор с помощью NSMutableOrderedSet или NSOrderedSet, которые доступны в MacOS X 10.7 или более поздней версии.

0 голосов
/ 13 марта 2012
...