0

为了学习,我正在制作一个小游戏。

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

是否可以对我的主要数组中的字典进行排序?

如果是,我将不胜感激。

谢谢

4

2 回答 2

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”创建一个新的(不可变的)数组,该数组是一个字典数组,其中“KEY_USERNAME”键用于比较 2 个任意元素。

于 2012-12-11T20:58:50.353 回答
0

对您的问题的快速回答是肯定的,您可以对一系列字典进行排序,稍后我将向您展示如何排序。但在此之前,请允许我说我不推荐这个。根据我从您上面的解释中了解到的情况,每个玩家都有 3 个特征:姓名、时间、计数器。在这种情况下,我认为不需要字典数组,我看到您要么有一个数组字典,其中每个数组都有您想要的 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
}
于 2012-12-11T21:06:58.143 回答