2011-03-31 4 views
5

У меня есть массив NSMutableDictionaries, содержащий (среди прочих) ключевое местоположение. Мне нужно отсортировать массив, чтобы ввести его в таблицу. В верхней части должно быть N, ниже должно быть A, а ниже должно быть R. Итак, в сортировке: как я могу отсортировать массив в порядке: N - A - R?Obj/C: Сортировка массива по индивидуальному заказу

EDIT: Я могу заказать, глядя на двух переменных, но я использую более 2 переменных (7 в общей сложности) ...

Спасибо,

ответ

6

Если массив является изменяемым, вы можете Сортируйте его с помощью методов -sortUsing .... Если нет, вы можете создать новый, отсортированный массив, используя методы -sortedArrayUsing .... Например, существуют -sortUsingComparator: и -sortedArrayUsingComparator: методы, которые принимают блок-компаратор как параметр. Вам просто нужно поставить блок, который сравнивает два объекта, используя пользовательский порядок сортировки, как это:

[myArray sortUsingComparator:^(id firstObject, id secondObject) { 
    NSString *firstKey = [firstObject valueForKey:@"location"]; 
    NSString *secondKey = [secondObject valueForKey:@"location"]; 
    if ([firstKey stringEqual:@"N"] || [lastKey stringEqual:@"R"]) 
     return NSOrderedAscending; 
    else if ([firstKey stringEqual:secondKey]) 
     return NSOrderedSame; 
    else 
     return NSOrderedDescending; 
}]; 

Там довольно подробное обсуждение сортировки массивов, с примерами, в Collections Programming Topics документе.

+0

@ Калеб благодарит Калеба, это немного помогло мне. Я все еще борется с сортировкой большего количества мест, N появляется сверху, но все буквы ниже появляются вместе, но на случайном роде. Мой полный список местоположений должен быть N-G-B-A-F-C. Так, например, все A вместе, но не непосредственно ниже B. Сортировка заказа - это N-B-C-F-A-G. Я использую блок, который вы использовали несколько раз, возможно, что-то там не так ...? – Joetjah

+0

@ Калеб, если использовать этот блок несколько раз, не будет работать (и случайно удаляется). Изложил предыдущий комментарий слишком быстро, не задумываясь. Хотя использование двух клавиш работает для меня, но использование более 2 (что мне нужно) - это то, где я боюсь. Какие-либо предложения? – Joetjah

+0

@Joetjah, я не уверен, что вы имеете в виду об использовании блока несколько раз. Я бы не обязательно рекомендовал использовать именно этот код, особенно если у вас больше трех значений, которые вы указали изначально. На самом деле я просто что-то делал что-то быстрое и грязное. Лучшим вариантом для большего количества значений может быть определение порядка в виде строки: @ «NBCFAG». Затем вы можете найти значение местоположения каждого словаря в строке и сравнить их индексы. Это намного лучше, чем большее количество возможных значений. – Caleb

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