Подтвердить что ты не робот

Хэш-таблицы в Cocoa

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

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

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

4b9b3361

Ответ 1

NSDictionary и NSMutableDictionary?

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

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:anObj forKey:@"foo"];
[dictionary objectForKey:@"foo"];
[dictionary removeObjectForKey:@"foo"];
[dictionary release];

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

Используйте 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]);