Objective-C: любой набор деревьев или TreeDictionary?

#cocoa #core-data #data-structures

#какао #основные данные #структуры данных

Вопрос:

Есть ли в Objective-C какой-либо аналог TreeSet или TreeDictionary в Java. По сути, либо структура данных набора, либо словаря, которая реализована с помощью дерева (отсортированного), либо хэш-таблицы (не отсортированной).

Спасибо!

Комментарии:

1. Почему вы хотите использовать TreeSet / TreeDictionary, когда время поиска O(logN) отличается O(1) от времени хэш-таблицы?

2. Потому что контейнер на основе дерева перечисляет свои элементы в определенном порядке, а контейнер на основе хэша перечисляет свои элементы в случайном порядке.

3. Как я подразумевал в сообщении, мне нужны отсортированные данные.

4. Вы могли бы просто отсортировать allValues массив.

Ответ №1:

Начиная с OS X 10.7 и iOS 5.0, вы можете использовать NSOrderedSet . Однако нет NSOrderedDictionary .

NSOrderedSet упорядочивает элементы в соответствии с тем, куда вы их вставляете, а не в соответствии с функцией сравнения. Вы можете эффективно поддерживать порядок сортировки, используя indexOfObject:inSortedRange:options:usingComparator: для поиска индекса, по которому нужно вставить новый объект, с NSBinarySearchingInsertionIndex опцией.

Обратите внимание также, что, хотя NSOrderedSet он понимает многие из тех же сообщений, что и оба NSSet и NSArray , он не является подклассом ни того, ни другого.

Комментарии:

1. На практике упорядоченный словарь очень легко реализовать, NSOrderedSet используя объекты-оболочки для значений.

Ответ №2:

Высокоуровневая базовая платформа iOS не имеет коллекции древовидного типа, но она есть в CoreFoundation — CFTree. В Foundation нет аналога с бесплатным мостом с хорошим объектно-ориентированным API, но это лучше, чем ничего.