2010-07-24 19 views
4

我有一個數組填充了包含兩個字符串屬性,名字和姓氏的自定義類的實例。兩者都有一個getter方法,它等於屬性本身的名稱。還有一種方法可以檢索名爲「getFullName」的人的全名。考慮下面的例子。排序具有自定義類的實例的數組

CustomClass *person = [[CustomClass alloc] ...]; 
person.firstname // Returns "Thomas" 
person.lastname // Returns "Meier" 
[person getFullName] // Returns "Thomas Meier" 

現在我想按降序排列這個Array by Fullname。我一直在尋找一些數組排序方法,但還沒有弄清楚如何去做這件事。我想我必須創建一些比較兩個元素的比較函數,但是我該如何告訴SDK哪些值傳遞給此方法以及我應該在哪裏放置它(在自定義類中或排序發生的類中?)。也許有另外一個/更好的方法來解決這個問題?無可否認,我對排序數組幾乎沒有經驗。

非常感謝您的幫助!

Ps。代碼應該在iOS 3.2上運行

+1

檢查此:http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it – 2010-07-24 18:52:03

回答

5

有幾種方法可以執行此操作。一個是在自定義類上放置一個比較方法。稱之爲-compare:或類似的東西。該方法應該採用與其輸入相同的自定義類型的另一個對象。它應返回NSOrderedAscending,NSOrderedDescendingNSOrderedSame,具體取決於比較結果。 (這裏面比較功能,你看看你自己的全名與傳入的對象的全名。)

然後你可以使用NSMutableArray-sortUsingSelector:方法,像這樣:

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

這適用於所有iOS版本。在4.0+中有塊比較方法。

+0

不要問我爲什麼,但我只是意識到如何這個系統在我讀你的帖子的時候工作:)真棒,現在的東西是有道理的。非常感謝!我認爲鏈接發佈爲我的問題的評論是創建一個單獨的自定義方法的快捷方式,但您的帖子當然也可以。 – Robin 2010-07-24 19:32:57