2012-03-02 2 views
4

Я разрабатываю приложение iOS 4 с последними версиями SDK и XCode 4.2.Сортировка ключей NSDictionary как NSDate

У меня есть NSMutableDictionary где ключи являются NSDate и значения являются NSMutableString.

Когда я заполнил NSMutableDictionary Я хочу отсортировать его ключи, но я не знаю, как это сделать.

Я хочу даты первого января, затем февраля и так далее.

NSDate формат ключа dd/mm/yyyy.

Как я могу отсортировать эти ключи, когда NSMutableDictionary имеет все ключи и значения? (Я не собираюсь добавлять больше).

+0

Вы не можете сортировать словарь, так как поиск на основе ключа, не показатель. Сначала вам нужно будет преобразовать его в массив. –

+0

См. Здесь от самого собственного Оле Бегемана. Например, для управления табличным представлением, но принципы должны применяться к вашему делу. http://oleb.net/blog/2011/12/tutorial-how-to-sort-and-group-uitableview-by-date/ – jrturton

+0

И это может быть реализация отсортированного NSMutableDictionary: http: // cocoawithlove. com/2008/12/ordereddictionary-subclassing-cocoa.html – VansFannel

ответ

8

Это довольно стандартная вещь, однако вы не можете сортировать NSDictionary - вы можете отсортировать массив, который вы получаете из словаря.

Это то, что я хотел бы сделать:

// get all keys into array 
NSArray * keys = [your_dictionary allKeys]; 

// sort it 
NSArray * sorted_keys = [keys sortedArrayUsingSelector:@selector(compare:)]; 

// now, access the values in order 
for (NSDate * key in sorted_keys) 
{ 
    // get value 
    NSMutableString * your_value = [your_dictionary valueForKey: key]; 

    // perform operations 
} 
7

Попробуйте этот код:

NSArray *sortedArray = [[myDict allKeys] sortedArrayUsingSelector:@selector(compare:)]; 

Но обратите внимание, что вы не можете сортировать словарь, так как он основан на ключ-значение поисков, не индексируются поиска.

+0

Хорошо. С помощью этого кода у меня будет в другом массиве все ключи отсортированы, а затем я могу использовать его для доступа к значениям словаря по заказу, не так ли? – VansFannel

+1

Да, это правильно, он будет работать так. –

Смежные вопросы