2012-12-18 41 views
2

排序我覺得這很簡單,但我不能換我的頭周圍。我有星期幾的陣列,用戶可以針對選擇:NSArray的反對的另一個NSArray的字符串

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

的日子裏,我作爲切換和關閉,我想他們的NSArray排序FO對dayOfTheWeek NSArray的選擇天。所以如果用戶有:

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

我想排序這個,以便它的星期一,星期四,星期五。

我似乎有一些類似的問題,但沒有一個足夠清楚,我知道我可以如何將它們應用於此。可能是我缺乏睡眠:)

謝謝!

回答

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:。這兩個NSUInteger位置返回一個NSComparisonResult的只是一個懶惰的方式。

+0

非常感謝,這似乎是一個竅門。你或別人會請簡要介紹一下發生了什麼? – ChickensDontClap

4

另一種可以做到這一點的方法是用用戶選項簡單地過濾每週的日子。

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