【问题标题】:NSArray sort against another NSArray of stringsNSArray 对另一个 NSArray 字符串排序
【发布时间】:2012-12-18 21:01:48
【问题描述】:

我觉得这很简单,但我就是想不通。我有一组用户可以选择的星期几:

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

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

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

我想把它排序为星期一、星期四、星期五。

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

谢谢!

【问题讨论】:

    标签: ios sorting nsstring nsarray


    【解决方案1】:
    NSArray *sortedUserDays = [userDays sortedArrayUsingComparator:^(id a, id b) {
        return [@([daysOfTheWeek indexOfObject:a]) compare:@([daysOfTheWeek indexOfObject:b])];
    }];
    

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

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

    然后它将位置包装到 NSNumbers 中:@(index)

    接下来它在包装的索引上调用compare:。这只是为两个NSUInteger 位置返回NSComparisonResult 的一种懒惰方式。

    【讨论】:

    • 非常感谢,这似乎可以解决问题。请您或其他人解释一下发生了什么?
    【解决方案2】:

    您可以这样做的另一种方法是使用用户选项简单地过滤一周中的日子。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多