• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 使用 2 个排序描述符对数组进行排序

[复制链接]
菜鸟教程小白 发表于 2022-12-13 15:07:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 NSDictionary 对象数组,每个对象都有一个 EventDateSecurityLevel。我想先按日期排序,然后按安全级别排序。我该怎么做?

Obj1: SecurityLevel: 5, Date: 20/05/2015 22:03
Obj2: SecurityLevel: 5, Date: 05/03/2015 05:28
Obj3: SecurityLevel: 4, Date: 14/04/2015 11:01
Obj4: SecurityLevel: 4, Date: 07/08/2015 09:31
Obj6: SecurityLevel: 3, Date: 24/04/2015 21:06
Obj5: SecurityLevel: 3, Date: 29/01/2016 22:38
Obj7: SecurityLevel: 2, Date: 02/06/2015 20:49
Obj8: SecurityLevel: 2, Date: 13/07/2015 17:46
Obj9: SecurityLevel: 1, Date: 19/08/2015 07:57

它们应该这样排序:

Obj1: SecurityLevel: 5, Date: 20/05/2015 22:03
Obj2: SecurityLevel: 5, Date: 05/03/2015 05:28
Obj4: SecurityLevel: 4, Date: 07/08/2015 09:31
Obj3: SecurityLevel: 4, Date: 14/04/2015 11:01
Obj5: SecurityLevel: 3, Date: 29/01/2016 22:38
Obj6: SecurityLevel: 3, Date: 24/04/2015 21:06
Obj8: SecurityLevel: 2, Date: 13/07/2015 17:46
Obj7: SecurityLevel: 2, Date: 02/06/2015 20:49
Obj9: SecurityLevel: 1, Date: 19/08/2015 07:57

我做了类似的事情,但它没有按预期工作:

- (NSArray*)sortEventsByDateAndSecurityNSArray*)toSort
{
    NSSortDescriptor *securityDescriptor = [[NSSortDescriptor alloc] initWithKey"SeverityLevel" ascending:NO];
    NSArray *sortDescriptors = @[securityDescriptor];
    NSArray *sortedSecurity = [toSort sortedArrayUsingDescriptors:sortDescriptors];

    NSArray *reverseOrderUsingComparator = [sortedSecurity sortedArrayUsingComparator:^(id obj1, id obj2) {

        NSDictionary *dictObject1 = (NSDictionary*)obj1;
        NSDictionary *dictObject2 = (NSDictionary*)obj2;

        NSDate *obj1Date = [Utils stringToDate:[dictObject1 valueForKey"EventDate"] format"dd/MM/yyyy HH:mm"];
        NSDate *obj2Date = [Utils stringToDate:[dictObject2 valueForKey"EventDate"] format"dd/MM/yyyy HH:mm"];

        return [obj1Date comparebj2Date];
    }];

    return reverseOrderUsingComparator;
}



Best Answer-推荐答案


您应该简单地调用 sortedArrayUsingDescriptors: 并使用 2 个描述符数组而不是 1 个:

- (NSArray*)sortEventsByDateAndSecurityNSArray*)toSort
{
    NSSortDescriptor *securityDescriptor = [[NSSortDescriptor alloc] initWithKey"SeverityLevel" ascending:NO];
    NSSortDescriptor *eventDateDescriptor = [[NSSortDescriptor alloc] initWithKey"EventDate" ascending:NO comparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
        NSDate *obj1Date = [Utils stringToDatebj1 format"dd/MM/yyyy HH:mm"];
        NSDate *obj2Date = [Utils stringToDatebj2 format"dd/MM/yyyy HH:mm"];
        return [obj1Date comparebj2Date];
    }];
    NSArray *sortDescriptors = @[securityDescriptor, eventDateDescriptor];
    return [toSort sortedArrayUsingDescriptors:sortDescriptors];
}

在这种情况下,第二个排序描述符将仅应用于与第一个排序描述符相等的对象。对于您的情况,这意味着具有相同 SecurityLevel 的对象将按 EventDate 排序。

关于ios - 使用 2 个排序描述符对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35828656/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap