0

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

有任何想法。

4

3 回答 3

1

有三种解决方案:

  1. 将 NSNumber 实例放入字典中以代替@"100"您当前拥有的字符串(例如 )。NSNumber 对象应该在数字上比较自己。

  2. 发送数组 asortUsingComparator:sortUsingFunction:context:message 而不是sortUsingDescriptors:,传递一个块或函数来检索字符串并以数字方式比较它们(通过向它们compare:options:发送带有NSNumericSearch选项的消息)。

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

  3. 用具有属性代替字典键的模型对象替换字典。如果你用数字类型(例如,)声明属性,那么当数组使用 KVC 访问属性时,它将获得 NSNumber 对象,正如上面 #1 中所述,它们应该以数字方式比较它们自己。NSUInteger

我会选择#3。

于 2010-08-24T19:52:49.997 回答
1

最好的方法是将您的数字存储为 NSNumbers:

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

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

[index sortUsingSelector:@selector(compare:)];
于 2011-05-05T05:17:27.303 回答
0
NSMutableArray* tempArray = [NSMutableArray arrayWithArray:anArray];
[tempArray sortUsingSelector:@selector(caseInsensitiveCompare:)];

我在一些代码中使用它?这行得通吗?

另外,刚刚注意到您将数组对象设置为字符串,我假设这也是一个问题。尝试将它们添加为 NSIntegers 或 ints ......这行得通吗?

于 2010-08-24T13:26:52.000 回答