为了学习,我在做一个小游戏。
我想对一个可变数组进行排序,为此我在网上看了几个例子。问题是,我需要对一组字典进行排序。每本字典都有一个玩家的名字,他完成比赛所用的时间和他使用的走法数量。
是否可以对主数组中的字典进行排序?
如果是这样,我会很感激你的解释。
谢谢
发布于 2012-12-12 05:06:58
对你的问题的快速回答是,是的,你可以对一组字典进行排序,稍后我将向你展示如何排序。但在此之前,请允许我说,我不推荐这样做。根据我对你上面解释的理解,每个玩家都有3个特征:名字,时间,计数器。在这种情况下,我看不出需要字典数组,我认为你要么有一个数组字典,其中每个数组都有你想要的3个项目,要么你可以为你的玩家创建一个对象(更推荐),然后你将得到一个对象数组,这是最简单的,然后你就可以很容易地对你的对象进行排序……
要回答您的问题,一种方法是使用NSArray的方法sortedArrayUsingFunction,您可以调用它来请求一个自定义排序函数,如下所示:
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-12 04:58:50
当然可以,但您必须提供比较器块,如下所示:
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”键的字典数组,用于比较两个任意元素。
https://stackoverflow.com/questions/13828094
复制相似问题