我觉得这很简单,但我无法绕过它。我有一周中的一天,用户可以选择反对:
NSArray * daysOfTheWeek = [NSArray arrayWithObjects:@"sunday", @"monday", @"tuesday", @"wednesday", @"thursday", @"friday", @"saturday", nil];
我作为日常开关的日子,我想根据dayOfTheWeek
NSArray对选定日期的NSArray进行排序。因此,如果用户有:
NSArray * userDays = [NSArray arrayWithObjects:@"thursday", @"monday", @"friday"];
我希望对星期四,星期四,星期五进行排序。
我似乎发布了一些类似的问题,但没有一个对我很清楚,我知道如何将它们应用于此。可能是我的睡眠不足:)。
谢谢!
答案 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]];