在其中使用NSDictionary对NSArray进行排序

时间:2017-01-17 08:42:43

标签: ios objective-c sorting nsarray nsdictionary

我需要按顺序从星期一到星期五对数组进行排序。我在这里做了那部分

NSArray *userDays = [NSArray arrayWithObjects:@"Monday", @"Tuesday", @"Wednesday",@"Thursday",@"Friday",nil];
[sortArray addObject:model.title];
NSArray *sortedUserDays = [userDays filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF in (%@)", sortArray]];

所以, sortArray 有5个对象,分别是星期一,星期二,星期三,星期四和星期五。问题是当我对需要排序的数组进行排序时,让我们说 tempArray 。我刚刚创建了sortArray,用于测试我的排序。

tempArray 里面有NSDictionary。日期(星期一,星期二等等)都在关键标题中。

现在就在这一行

NSArray *sortedUserDays = [userDays filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF in (%@)", sortArray]];

我需要通过 tempArray.model.title 之类的内容来更改 sortArray 。我怎么能这样做才能对嵌套的NSArray进行排序?

示例数据:

tempArray[0]
{ title : "Friday", identity: "someUniqueIdentity", url: "httpwww.123" }

tempArray[1]
{ title: "Wednesday", identity: "someUniqueIdentity2", url :"httpwww.1233" }

tempArray[2]
{ title: "Monday", identity: "someUniqueIdentity3", url: "httpwww.1233" }


tempArray[3]
{ title: "Thursday", identity: "someUniqueIdentity3", url :"httpwww.1233" }


tempArray[4]
{ title: "Tuesday", identity: "someUniqueIdentity3", url: "httpwww.1233" }

预期产出:

tempArray[0]
{ title: "Monday", identity: "someUniqueIdentity3", url: "httpwww.1233" }

tempArray[1]
{ title: "Tuesday", identity: "someUniqueIdentity3", url :"httpwww.1233" }

tempArray[2]
{ title: "Wednesday", identity: "someUniqueIdentity2", url :"httpwww.1233" }

tempArray[3]
{ title: "Thursday", identity: "someUniqueIdentity3", url :"httpwww.1233" }

tempArray[4]
{ title: "Friday", identity: "someUniqueIdentity", url: "httpwww.123" }

1 个答案:

答案 0 :(得分:0)

我不确定我理解你在寻找什么,但它可能是这样的吗?

NSArray *tempArray = @[
        @{ @"title": @"Friday", @"identity" : @"someUniqueIdentity", @"url" : @"httpwww.123"},
        @{ @"title" : @"Wednesday", @"identity" :  @"someUniqueIdentity2", @"url" :  @"httpwww.1233" },
        @{ @"title" : @"Monday", @"identity" :  @"someUniqueIdentity3", @"url" :  @"httpwww.1233" },
        @{ @"title" : @"Thursday", @"identity" :  @"someUniqueIdentity3", @"url" :  @"httpwww.1233" },
        @{ @"title" : @"Tuesday", @"identity" :  @"someUniqueIdentity3", @"url" :  @"httpwww.1233" }
];

NSArray *weekdays = @[@"Monday", @"Tuesday", @"Wednesday", @"Thursday", @"Friday"];

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES comparator:^NSComparisonResult(NSString *day1, NSString *day2) {
    NSUInteger index1 = [weekdays indexOfObject:day1];
    NSUInteger index2 = [weekdays indexOfObject:day2];
    return (NSComparisonResult) (index1 >= index2);
}];

NSArray *result = [tempArray sortedArrayUsingDescriptors:@[descriptor]];