NSArray对另一个NSArray字符串进行排序

时间:2012-12-18 21:01:49

标签: ios sorting nsstring nsarray

我觉得这很简单,但我无法绕过它。我有一周中的一天,用户可以选择反对:

NSArray * daysOfTheWeek = [NSArray arrayWithObjects:@"sunday", @"monday", @"tuesday", @"wednesday", @"thursday", @"friday", @"saturday", nil];

我作为日常开关的日子,我想根据dayOfTheWeek NSArray对选定日期的NSArray进行排序。因此,如果用户有:

NSArray * userDays = [NSArray arrayWithObjects:@"thursday", @"monday", @"friday"];

我希望对星期四,星期四,星期五进行排序。

我似乎发布了一些类似的问题,但没有一个对我很清楚,我知道如何将它们应用于此。可能是我的睡眠不足:)。

谢谢!

2 个答案:

答案 0 :(得分:5)

NSArray *sortedUserDays = [userDays sortedArrayUsingComparator:^(id a, id b) {
    return [@([daysOfTheWeek indexOfObject:a]) compare:@([daysOfTheWeek indexOfObject:b])];
}];

编辑:这会使用块作为比较器对数组进行排序。

要比较userDays数组的两个元素,首先要搜索模板数组daysOfTheWeek中的位置:[daysOfTheWeek indexOfObject:a]

然后将位置包含在NSNumbers中:@(index)

接下来,它会对包装的索引调用compare:。这只是为NSComparisonResult两个职位返回NSUInteger的懒惰方式。

答案 1 :(得分:4)

另一种方法是,只需使用用户选项过滤一周中的几天。

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