Как сохранить массив отсортированным - PullRequest
2 голосов
/ 05 октября 2010

Я занимаюсь рефакторингом проекта, который включает в себя передачу множества массивов. В настоящее время каждый метод, который возвращает массив, сортирует его прямо перед возвратом. Это не идеально по нескольким причинам - много дублированного кода, неэффективно сортировать массив два или три раза, и слишком легко написать новую функцию, но забыть отсортировать массив перед его возвратом.

Я ищу способ гарантировать, что массив всегда хранится в алфавитном порядке. Моя текущая мысль - создать подкласс NSMutableArray и / или NSArray для создания класса массива в алфавитном порядке. Мне нужно переопределить все методы, которые создают или модифицируют массив, чтобы вызвать super, а затем отсортировать себя.

Это звучит разумно, или есть лучший подход?

EDIT: Поскольку проблемы производительности были упомянуты, я включу соответствующую информацию из моего проекта. Скорость не важна. Весь процесс занимает всего несколько секунд, и инструмент используется только очень часто. Так что простота и очевидная правильность важнее.

Кроме того, вариант использования для массивов является специфическим. Когда возвращается массив, вызывающая сторона всегда обращается к каждому элементу в массиве хотя бы один раз.

Ответы [ 2 ]

4 голосов
/ 05 октября 2010

Сбалансированное двоичное дерево - это стандартный и эффективный способ сортировки элементов.Почти любой способ сделать произвольный доступ с простым массивом будет медленным.Список пропусков также эффективен, и вы можете добавить функциональность в класс массива.

3 голосов
/ 05 октября 2010

Проверить CHDataStructures .Это фреймворк, который имеет множество самосортирующихся структур данных, таких как сбалансированные бинарные деревья и еще много чего.

...