首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据字典中的键值对字典的NSArray进行排序

根据字典中的键值对字典的NSArray进行排序
EN

Stack Overflow用户
提问于 2012-03-01 08:54:52
回答 10查看 48.5K关注 0票数 65

我有一个由字典填充的数组,并且我需要按字典的一个键的值按字母顺序对该数组进行排序。

这是我的数组:

代码语言:javascript
复制
tu dictus: (
    {
    brand = Ryul;
    productTitle = Any;
    quantity = 1;
    subBrand = "Ryul INJ";
    type = Product;
},
    {
    brand = Trol;
    productTitle = Different;
    quantity = 2;
    subBrand = "";
    type = Brand;
},
    {
    brand = Dtor;
    productTitle = Any;
    quantity = 1;
    subBrand = "";
    type = Product;
},
    {
    brand = Ryul;
    productTitle = Different;
    quantity = 2;
    subBrand = "Ryul CHES";
    type = SubBrand;
},
    {
    brand = Anan;
    productTitle = Any;
    quantity = 1;
    subBrand = "";
    type = Product;
}
)

通常,为了对数组进行排序,我将使用

代码语言:javascript
复制
myArray = [uniqueProdsArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

但是如何使用字典的brand键进行排序呢?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-03-01 09:00:40

我想这样就可以了:

代码语言:javascript
复制
brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES];
sortDescriptors = [NSArray arrayWithObject:brandDescriptor];
sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];

我从Sort Descriptor Programming Topics上提取了代码。此外,Key-Value Coding也发挥了作用,因为sortedArrayUsingDescriptors:将向myArray中的每个元素发送一个valueForKey:,然后使用标准比较器对返回值进行排序。

票数 111
EN

Stack Overflow用户

发布于 2013-08-26 18:20:12

我们使用下面的方法得到了解决方案

代码语言:javascript
复制
[self.jsonData sortUsingDescriptors: [NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:"fullname" ascending:YES], [NSSortDescriptor sortDescriptorWithKey:"id" ascending:NO], nil]];

其中:-

JSON - MutableArray,保存解析后的jsonData数据。

fullname -我们要排序的数据。

id -内部字典附带的唯一数据。

票数 9
EN

Stack Overflow用户

发布于 2015-09-19 15:14:13

代码语言:javascript
复制
 arrSorted = [arrBrand sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            if ([[obj1 valueForKey:@"iUserId"] integerValue] > [[obj2 valueForKey:@"iUserId"] integerValue]) {
                return (NSComparisonResult)NSOrderedDescending;
            }
            if ([[obj1 valueForKey:@"iUserId"] integerValue] < [[obj2 valueForKey:@"iUserId"] integerValue]) {
                return (NSComparisonResult)NSOrderedAscending;
            }
            return (NSComparisonResult)NSOrderedSame;
        }];
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9509138

复制
相关文章

相似问题

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