Хеш-таблицы в какао - PullRequest
       14

Хеш-таблицы в какао

27 голосов
/ 23 января 2009

HashTables / HashMaps являются одними из самых (если не самых) полезных из существующих структур данных. Таким образом, одной из первых вещей, которые я исследовал, когда начал изучать программирование в Какао, было то, как создавать, заполнять и читать данные из хеш-таблицы.

К моему удивлению: вся документация, которую я читал по программированию на Какао / Objective-C, кажется, вообще ничего не объясняет. Как Java-разработчик, который использует «java.util», как если бы это была телесная функция: я совершенно сбит с толку этим.

Итак, если бы кто-то мог предоставить мне учебник для создания, заполнения и чтения содержимого хеш-таблицы: я был бы очень признателен.

Ответы [ 5 ]

58 голосов
/ 23 января 2009

NSDictionary и NSMutableDictionary ?

А вот простой пример:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:anObj forKey:@"foo"];
[dictionary objectForKey:@"foo"];
[dictionary removeObjectForKey:@"foo"];
[dictionary release];
12 голосов
/ 08 июля 2011

Вы можете попробовать использовать NSHashTable !

8 голосов
/ 24 января 2009

Если вы используете Leopard (и новую сборку мусора Cocoa), вы также хотите взглянуть на NSMapTable .

7 голосов
/ 24 января 2009

В дополнение к NSDictionary, также проверьте NSSet, когда вам нужна коллекция без порядка и без дубликатов.

2 голосов
/ 25 января 2018

Используйте NSHashTable из iOS 6.0+ SDK. Хеш-таблица моделируется после NSSet со следующими отличиями: Он может содержать слабые ссылки на своих членов. Его члены могут быть скопированы на входе или могут использовать идентичность указателя для равенства и хеширования. Он может содержать произвольные указатели (его члены не обязательно должны быть объектами).

 NSHashTable *hashTable = [NSHashTable 
 hashTableWithOptions:NSPointerFunctionsCopyIn];
 [hashTable addObject:@"foo"];
 [hashTable addObject:@"bar"];
 [hashTable addObject:@100];
 [hashTable removeObject:@"bar"];
 NSLog(@"Members: %@", [hashTable allObjects]);

Используйте NSMapTable из iOS 6.0+ SDK. Таблица карты смоделирована после NSDictionary со следующими отличиями: Ключи и / или значения необязательно удерживаются «слабо», так что записи удаляются, когда один из объектов возвращается Его ключи или значения могут быть скопированы на входе или могут использовать идентичность указателя для равенства и хеширования. Он может содержать произвольные указатели (его содержимое не обязательно должно быть объектом).

 id delegate = ...;
 NSMapTable *mapTable = [NSMapTable 
 mapTableWithKeyOptions:NSMapTableStrongMemory
                                         valueOptions:NSMapTableWeakMemory];
 [mapTable setObject:delegate forKey:@"foo"];
 NSLog(@"Keys: %@", [[mapTable keyEnumerator] allObjects]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...