首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存放字典的排序数组

问存放字典的排序数组
EN

Stack Overflow用户
提问于 2012-12-12 04:35:48
回答 2查看 63关注 0票数 0

为了学习,我在做一个小游戏。

我想对一个可变数组进行排序,为此我在网上看了几个例子。问题是,我需要对一组字典进行排序。每本字典都有一个玩家的名字,他完成比赛所用的时间和他使用的走法数量。

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

如果是这样,我会很感激你的解释。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-12 05:06:58

对你的问题的快速回答是,是的,你可以对一组字典进行排序,稍后我将向你展示如何排序。但在此之前,请允许我说,我不推荐这样做。根据我对你上面解释的理解,每个玩家都有3个特征:名字,时间,计数器。在这种情况下,我看不出需要字典数组,我认为你要么有一个数组字典,其中每个数组都有你想要的3个项目,要么你可以为你的玩家创建一个对象(更推荐),然后你将得到一个对象数组,这是最简单的,然后你就可以很容易地对你的对象进行排序……

要回答您的问题,一种方法是使用NSArray的方法sortedArrayUsingFunction,您可以调用它来请求一个自定义排序函数,如下所示:

代码语言:javascript
复制
mySortedArray = [myArray sortedArrayUsingFunction:myCustomSort context:nil];

现在,您可以编写自己的排序函数,在该函数中,您将根据需要转换对象。下面是一个示例:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-12-12 04:58:50

当然可以,但您必须提供比较器块,如下所示:

代码语言:javascript
复制
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”键的字典数组,用于比较两个任意元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13828094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档