2011-12-22 58 views
5

可能重複:
What is the most efficient way to sort an NSSet?objective-c排序NSStrings的NSMutableSet?

我現在有一個的NSMutableSet具有下列字符串列表。例如: {@ 「C」,@ 「d」,@ 「E」,@ 「F」,@ 「G」,@ 「一」}

有人可以告訴我怎麼可以排序這些按字母順序排列?有沒有辦法使用sortedArrayUsingDescriptors:來做到這一點?

+1

http://stackoverflow.com/questions/1351182/how-to-sort-a-nsarray-alphabetically – 2011-12-22 19:38:03

+1

上述帖子的選擇器在NSSet上可用。請注意,它將不再是一個集合。數組是有序的,集合不是。 – 2011-12-22 19:40:39

+0

我會說這是**而不是**這個問題的重複。具體來說,另一個更一般的問題對於如何在這個特定的邊界情況下創建描述符沒有幫助,它不像看起來那麼明顯,因爲你首先想到的是「但我不想基於在對象上的鍵上;我想根據對象本身進行排序「。當然,答案是「自我」鍵給你,但對於不知道鍵值編碼的人來說,它並不是特別明顯。 :-) – dgatwood 2014-09-12 08:06:24

回答

15

當然,你可以使用該方法:

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

這只是創建了一個新的排序描述符指定鍵「說明」(的NSString提供-description方法返回字符串)。然後它將包含該排序描述符的數組作爲參數傳遞給-sortedArrayUsingDescriptors:,您可以將該數組發送到任何NSSet。

+0

如果你通過「自我」作爲關鍵,你會得到相同的結果。我想通過請求描述鍵,你實際上正在做額外的工作。具體來說,我認爲它通過調用所請求的鍵的描述方法來獲得用於排序的值,因此您實際上正在描述描述)。 – dgatwood 2014-09-12 08:00:58

+0

@dgatwood你打敗了我。我只寫了一些代碼來對NSString數組進行排序,並決定將@作爲key的「self」。來到這裏檢查是否有替代方案。 – pnizzle 2015-01-22 03:44:51

+0

@dgatwood你沒有錯,但使用*描述*即使數組包含的對象不是字符串,它也可以工作得更健壯一些。由於OP確實指出對象是字符串,但是同時額外工作的數量可以忽略不計,這是否真的是值得的。 – Caleb 2015-01-22 05:36:17

-2

NSSets是無序集合。如果你想要一個有序的容器,使用NSArray。

1

我打算假設這個問題Sorting NSSet是你的問題的答案。對於點擊的硬...

[mySet sortedArrayUsingDescriptors:descriptors];