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

Chi*_*lap 2 sorting nsstring nsarray ios

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

NSArray * daysOfTheWeek = [NSArray arrayWithObjects:@"sunday", @"monday", @"tuesday", @"wednesday", @"thursday", @"friday", @"saturday", nil];
Run Code Online (Sandbox Code Playgroud)

我作为日常开关的日子,我想根据NSArray对dayOfTheWeekNSArray进行选择.因此,如果用户具有:

NSArray * userDays = [NSArray arrayWithObjects:@"thursday", @"monday", @"friday"];
Run Code Online (Sandbox Code Playgroud)

我希望对它进行排序,以便星期一,星期四,星期五.

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

谢谢!

Nik*_*uhe 5

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

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

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

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

接下来它调用compare:包装的索引.这只是回归NSComparisonResult两个NSUInteger位置的懒惰方式.