对NSMutableSet进行排序

时间:2012-03-13 14:58:15

标签: objective-c ios nsmutableset

我必须使用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
)}

所以我想我需要对它们进行排序以获得想要的结果?但实际上我找不到任何例子。

也许有人可以帮我这个?

感谢。

修改 我不能用别的。只需NSMutableSetNSSet

6 个答案:

答案 0 :(得分:3)

正如其他人所说,NSSet根据定义没有排序。但是,如果你 使用NSMutableSet,你可以使用类似的东西从元素中获取一个排序数组(假设,在这种情况下元素是字符串)

NSArray* unsorted = [mySet allObjects];
NSArray* sorted = [unsorted sortedArrayUsingComparator: ^(NSString* string1, NSString* string2)
                   {
                       return [string1 localizedCompare: string2];
                   }];

答案 1 :(得分:2)

如果NSSet的任何特性是他们没有任何订单!

你应该为你的目的使用NSMutableArray。

在这里阅读收藏,它会帮助你

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

答案 2 :(得分:1)

'NSSet'是无序的。它只包含唯一的项目(没有重复的项目)。来自NSSet的Apples文档:

  

...声明对象的无序集合的编程接口。

如果您需要订购,请转到NSMutableArrayNSMutableOrderedSet

答案 3 :(得分:1)

试试这个

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);

答案 4 :(得分:0)

答案 5 :(得分:0)

根据定义,集合是无序的。您需要使用NSMutableOrderedSet或NSOrderedSet在MacOS X 10.7或更高版本中提供的有序集。