Какао - Перечислите изменяемый массив, удаляя объекты - PullRequest
0 голосов
/ 27 марта 2010

У меня есть изменяемый массив, который содержит изменяемые словари со строками для ключей широты, долготы и идентификатора. Некоторые значения широты и долготы одинаковы, и я хочу удалить дубликаты из массива, чтобы у меня был только один объект на местоположение.

Я могу перечислить свой массив и с помощью второго перечисления просмотреть каждый объект, чтобы найти объекты, которые имеют разные идентификаторы, но одинаковую широту и долготу, но если я пытаюсь удалить объект, я отключаю массив во время перечисления. 1003 *

Есть ли способ удалить объекты из массива при перечислении, поэтому я перечисляю только текущий набор объектов при обновлении массива?

Надеюсь, этот вопрос имеет смысл.

Спасибо, Howie

Ответы [ 2 ]

5 голосов
/ 27 марта 2010

Подсчитайте индексную переменную при перечислении. Когда вы сталкиваетесь со словарем, который хотите удалить, добавьте его индекс в набор изменяемых индексов . Затем, когда вы закончите перечисление, отправьте массиву a removeObjectsAtIndexes: сообщение , передавая набор индексов.

Другим способом было бы создать второй массив, затем отправить первому массиву сообщение setArray:, передав второй массив - или освободить первый, сохранить второй и установить второй как новый первый. 1009 *

На несвязанной заметке вы могли бы рассмотреть вопрос о замене словарей на объекты модели . Это имеет тенденцию делать для более чистого кода.

2 голосов
/ 04 декабря 2013

На самом деле вы можете. Вам нужно перейти от верхнего индекса к 0. Попробуйте это:

for (int i = [mutableArray count] -1; i >=0; i--) {
    id yourObject = [mutableArray objectAtIndex: i];
    BOOL needToDelete;
    // place you conditions here...

    if (needToDelete) {
        [mutableArray removeObject: yourObject];
    }
}
...