2012-12-11 47 views
0

为了学习,我正在制作一个小型游戏。拥有字典的排序数组

我想排序一个可变数组,并为此我看到了一些例子。问题是,我需要对一系列字典进行排序。每个字典都有一个玩家的名字,让他完成的时间和他使用的移动次数。

是否有可能排序我的主阵列内的字典?

如果是我将不胜感激解释。

感谢

+1

看看NSArray的规范。有一整套的排序功能,其中至少有一半可以做你想做的。 –

+0

这与Xcode有什么关系? – 2012-12-11 21:07:21

回答

0

快速回答你的问题是,你可以排序一个字典数组,我会告诉你如何在一瞬间。但在此之前,请允许我说我不建议这样做。根据我从上面的解释中了解到,每个球员都有三个特征:姓名,时间,计数器。在这种情况下,我没有看到需要一个字典数组,我看到你有一个数组字典,其中每个数组都有你想要的3个项目,或者你可以为你的播放器创建一个对象(更多推荐),最后你会得到一组最简单的对象,然后你将很容易地排序你的对象...

要回答你的问题,一种方法是使用方法sortedArrayUsingFunctionNSArray你可以在哪里叫它问这样一个自定义排序功能:

mySortedArray = [myArray sortedArrayUsingFunction:myCustomSort context:nil]; 

现在,您可以编写自己的排序函数,其中根据需要,你会投你的对象。这里是一个例子:

NSInteger myCustomSort(id val1, id val2, void *context) 
{ 
    NSDictionarry *dic1 = (NSDictionarry *) val1; 
    NSDictionarry *dic2 = (NSDictionarry *) val2; 
    //now you have 2 dictionaries from the array, jut do the comparison you want and return any of NSOrderedAscending, NSOrderedDescending, or NSOrderedSame 
} 
+0

如果仔细观察,一组字典就好了。从封装的角度来看它更好。 – 2012-12-11 21:08:03

+0

我认为这取决于项目的规模和后期的复杂性,也许这只是一个小项目,因为他说的词典很好,但对不同的方法有一个想法是很好的。 – antf

+0

嗯...我真的不知道如何在你给我的函数中使用代码。我知道它返回一个NSInteger,但是val1和val2究竟代表什么?情境如何帮助我? –

0

当然,你可以,但你必须提供比较块,这样的事情:

NSArray *sortedArray = [startArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
    NSString* aa = [a objectForKey:KEY_USERNAME]; 
    NSString* bb = [b objectForKey:KEY_USERNAME]; 
    return [bb compare:aa]; 
}]; 

这从“startArray”这是一个数组创建一个新的(unmutable)阵列用于比较两个任意元素的“KEY_USERNAME”键的字典。