对NSMutableArray进行排序

时间:2010-08-24 13:18:20

标签: cocoa string sorting nsmutablearray nsmutabledictionary

请帮帮我 我想对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

有任何想法。

3 个答案:

答案 0 :(得分:1)

有三种解决方案:

  1. 将NSNumber实例放入字典中,代替您当前拥有的字符串(例如@"100")。 NSNumber对象应该在数字上进行比较。
  2. 向数组发送sortUsingComparator:sortUsingFunction:context:消息而不是sortUsingDescriptors:,传递一个块或函数来检索字符串并以数字方式对它们进行比较(通过发送它们{{3}带NSNumericSearch选项的消息。)

    请注意,块或函数将传递整个字典,而不是字符串,因为它无法知道要提取哪些字符串,因此您必须自己从字典中获取字符串才能进行比较它们。

  3. compare:options:替换为具有model objects的字典替换字典键。如果使用数字类型声明属性(例如,NSUInteger),那么当数组使用KVC访问属性时,它将获得NSNumber对象,如上面#1所述,它们应该在数字上进行自我比较。
  4. 我会选择#3。

答案 1 :(得分:1)

执行此操作的最佳方法是将您的号码存储为NSNumbers:

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

然后,您可以使用[NSNumber compare:]方法对数组进行排序:

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

答案 2 :(得分:0)

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

我在一些代码中使用它?这有用吗?

另外,只是注意到你将数组对象设置为字符串,我假设这也是一个问题。尝试将它们添加为NSIntegers或ints ...这样可以吗?