2

我觉得这很简单,但我就是无法理解它。我有一组用户可以选择的一周中的几天:

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

我作为打开和关闭日期的开关,我想根据 NSArray 对所选日期的dayOfTheWeekNSArray 进行排序。因此,如果用户有:

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

我想对它进行排序,以便星期一、星期四、星期五。

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

谢谢!

4

2 回答 2

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职位返回 an 的一种懒惰方式。

于 2012-12-18T21:10:19.260 回答
4

您可以执行此操作的另一种方法是使用用户选项简单地过滤您的星期几。

NSArray *sortedUserDays = [daysOfTheWeek filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF in (%@)", userDays]];
于 2012-12-18T21:20:24.407 回答