2013-02-14 118 views
0

我想了解編寫比較函數的標準方式是什麼。iOS比較功能

如果我有一個對象Person與屬性age並希望編寫我自己的比較函數。我想使用它,以便Person對象從低到高順序排列。

Person *young = [[Person alloc] initWithAge:10]; 
Person *old = [[Person alloc] initWithAge:80]; 

如果我現在運行[young compare:old]這應該回報NSOrderedDescendingNSOrderedAscending

我不確定哪個對象從哪個對象上升或下降(如果有意義的話)。

+1

單寫它不是很簡單,運行比較,看看你的訂單是否是你期望的?比發表問題更容易,並等待回覆? – mah 2013-02-14 00:33:48

+0

是的,但如果我自己寫,我可以把它放在任何地方。 – Fogmeister 2013-02-14 00:34:12

+0

如何使用它只在使用時纔有意義,所以如果你使用它,你將不僅僅是一個任意的決定(並且足以知道這個決定是否有效)。如果您要將兩個Person對象放在一個NSArray中,然後使用符合您的猜測的比較函數對數組進行排序,那麼您將立即從輸出中知道元素是否根據您的期望進行了排序( - >您的決定是正確的),或與他們相反( - >扭轉你的比較意識來修復它)。 – mah 2013-02-14 00:38:04

回答

2

結果:

[obj1 compare:obj2] 

應該是:

  • NSOrderedAscending如果在爲「OBJ1,OBJ2寫'物體按升序排列;
  • NSOrderedDescending如果寫入'obj1,obj2'時對象是降序;
  • NSOrderedSame否則。

所以,你應該看到:

[@2 compare:@3] == NSOrderedAscending 
[@"b" compare:@"a"] == NSOrderedDescending 

等來記住它是想從左至右中不管是誰做主叫閱讀方式。

+0

非常好的答案,非常感謝,這正是我一直在尋找的。 – Fogmeister 2013-02-14 01:40:48

2

最簡單的方法是隻依靠現有的實現

- (NSComparisonResult)compare:(Person *)other; 
{ 
    return [@(self.age) compare:@(other.age)]; 
}