2012-03-13 24 views
-2

我必須使用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

+0

爲什麼couldn你用NSMutableOrderedSet還是NSOrderedSet? – 2013-09-14 06:42:56

回答

0

集被定義無序。您需要通過使用MacOS X 10.7或更高版本中提供的NSMutableOrderedSet或NSOrderedSet來進行有序集合。

1

'NSSet'是無序的。它只包含唯一的項目(不包含重複的項目)。從NSSet中的蘋果文檔:

...聲明編程接口對象的無序集合

如果您想要訂購,請致電NSMutableArrayNSMutableOrderedSet

+0

我不能使用其他。只是NSMutableSet或NSSet – Streetboy 2012-03-13 15:07:58

3

正如其他人所說,NSSet根據定義未排序。 Howeever,如果你使用NSMutableSet你使用類似(假定,在這種情況下,元素是字符串)可以獲取元素的有序陣列

NSArray* unsorted = [mySet allObjects]; 
NSArray* sorted = [unsorted sortedArrayUsingComparator: ^(NSString* string1, NSString* string2) 
        { 
         return [string1 localizedCompare: string2]; 
        }]; 
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); 
+0

你是怎麼把@「描述」?那是什麼? – Developer 2014-12-19 07:24:07