2010-08-24 102 views
0

請幫我 我要排序的NSMutableArray是的,我可以通過排序的NSMutableArray

NSSortDescriptor *sortPoint = [[NSSortDescriptor alloc] initWithKey:@"point" ascending:YES]; 
[hightScore sortUsingDescriptors:[NSArray arrayWithObject:sortPoint]]; 

但NSMuatableArray(hightScore)做到這一點,我有2個的NSMutableDictionary這樣

[item setObject:@"player_name" forKey:@"name"]; 
[item setObject:@"100" forKey:@"point"]; 

當我按關鍵字「point」排序,就是它給我這樣的字符串 100> 20> 30> 50 應該是 20> 30> 50> 100

有任何想法pleassss。

回答

1

有三種解決方案:在地方琴絃

  1. 看跌的NSNumber實例到詞典(例如,@"100")您目前有。 NSNumber對象應該用數字來比較自己。
  2. 發送陣列的sortUsingComparator:sortUsingFunction:context:消息而不是sortUsingDescriptors:,傳遞檢索字符串和它們的數值進行比較(通過與NSNumericSearch選項發送它們compare:options:消息)的塊或功能。

    請注意,塊或函數將傳遞整個字典,而不是字符串,因爲它無法知道要提取哪些字符串,所以您必須自己將字符串從字典中取出以便比較它們。

  3. 將字典替換爲model objects,其中properties代替字典鍵。如果使用數字類型(例如NSUInteger)聲明屬性,那麼當數組使用KVC訪問屬性時,它將獲得NSNumber對象,如上面#1所述,它應該以數字方式進行比較。

我會去#3。

+0

如何用數值類型聲明屬性? – 2010-08-25 13:27:34

+0

當你聲明它時給它一個數字類型。我鏈接到的文檔向您展示瞭如何聲明一個屬性。 – 2010-08-25 13:38:29

+0

非常感謝我使用選擇,它的工作!這是我對每個人的代碼 [item setObject:[NSNumber numberWithInt:[[[modeObject valueForKey:@「point」] description] intValue]] forKey:@「point」]; ** item is NSMutableArray – 2010-08-25 14:11:06

0
NSMutableArray* tempArray = [NSMutableArray arrayWithArray:anArray]; 
[tempArray sortUsingSelector:@selector(caseInsensitiveCompare:)]; 

我在某些代碼中使用了這個嗎?這會工作嗎?

另外,只是注意到你正在設置數組對象作爲我假設的字符串也將是一個問題。嘗試添加他們作爲NSIntegers或整數...這一切工作呢?

+0

的問題是,提問者是比較字符串的默認方式,這不是一個數字比較。 'caseInsensitiveCompare:'也不是數字比較。 – 2010-08-24 19:44:59

+0

嗯,足夠公平 – 2010-08-25 08:26:13

+0

這是我的代碼: [item setObject:[NSNumber numberWithInt:[[[modeObject valueForKey:@「point」] description] intValue]] forKey:@「point」]; 可能會幫助你^ ____^ – 2010-08-25 14:12:19

1

做到這一點,最好的辦法是你的號碼存儲爲NSNumbers:

[index addObject:[[NSNumber alloc] initWithInt:number]]; 

然後你就可以排序使用[NSNumber compare:]方法的數組:

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