Ваш вопрос не очень понятен:
- Массивы - это "упорядоченная коллекция" по определению (кроме странных языков с "ассоциативными массивами").
- «Порядок» - это не то же самое, что «сортировка».[1, 2, 3] отсортировано;[1, 3, 2] не отсортировано, но упорядочено (в предположении обычного компаратора).
- «Предотвращение дублирования NSArrays» - бесполезная тема.
Итак, я 'Вам нужно будет угадать, что вы пытаетесь сказать:
- У вас есть список вещей, которые вы загружаете из Интернета.
- Вы время от времени обновляете список загруженных вещей.
- Пользователь может изменить порядок списка.
- Вы хотите иметь возможность обновлять список вещей, но сохранить порядок пользователя.
Ну, сначала вам нужнокакой-то способ выяснить, какие элементы в двух списках "эквивалентны".Например, первый список - [Apple, Banana, Orange], и пользователь размещает его в порядке предпочтения сока [Orange, Apple, Banana].Если второй список [яблоко, банан, апельсин] (поскольку вы решили, что все должно быть в нижнем регистре, а вещи, которые должны быть написаны заглавными буквами, можно сделать с помощью -[NSString capitalizedString]
или чего-либо еще), вам нужен способ определить, что Apple =apple и создание нового списка [апельсин, яблоко, банан].
Непонятно, почему вы думаете, что вам нужно сохранить исходный список - да, это означает, что вы можете просто сказать: «Apple и яблоко оба виндекс 0, так что они одинаковы ", но это также означает, что вы никогда не сможете изменить порядок по умолчанию, и вы никогда не сможете удалить элемент (вы можете заменить его заполнителем, но не ме).
Есть два простых решения:
- Храните список индексов (например, вы бы сохранили [2, 0, 1], потому что Orange имеет индекс 2 и т. Д.).Это немного боли.Если вы хотите использовать NSArray, самый простой способ - обернуть вещи в NSNumber.
- Не обращайте внимания на исходный порядок.Допустим, у вас есть «заказанный пользователем» список [Orange, Apple, Banana] и новый «заказанный сервером» список [apple, grape, orange].Перебирайте пользовательский список, выбирая «эквивалентные» элементы из списка, упорядоченного сервером, чтобы получить [orange, apple] и [grape].Затем сделайте что-нибудь вменяемое с «новыми» предметами, например, наклеив его на конец, чтобы получить [апельсин, яблоко, виноград].(В этом примере Banana был удален; мы обрабатываем этот случай, просто не добавляя его в новый список.)