2

これは簡単だと思いますが、頭を包むことはできません。ユーザーが選択できる曜日の配列があります。

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

日のオンとオフの切り替えとして、選択した日の NSArray を NSArray に対して並べ替えたいと思いdayOfTheWeekます。したがって、ユーザーが次の場合:

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])];
}];

編集:これは、ブロックをコンパレータとして使用して配列をソートします。

配列の 2 つの要素を比較するにはuserDays、まずテンプレート配列内の位置を検索しますdaysOfTheWeek[daysOfTheWeek indexOfObject:a]

次に、位置を NSNumbers: にラップします@(index)

compare:次に、ラップされたインデックスを呼び出します。NSComparisonResultこれは、2 つのNSUInteger位置に対してを返す怠惰な方法です。

于 2012-12-18T21:10:19.260 に答える
4

これを行う別の方法は、ユーザー オプションを使用して曜日を単純にフィルタリングすることです。

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