28

HashTables/HashMaps 是现有数据结构中最有用的(如果不是最有用的话)之一。因此,当我开始学习 Cocoa 编程时,我研究的第一件事就是如何从哈希表创建、填充和读取数据。

令我惊讶的是:我一直在阅读的关于 Cocoa/Objective-C 编程的所有文档似乎根本没有解释这么多。作为一个使用“java.util”就好像它是一个身体功能的Java开发人员:我对此完全感到困惑。

因此,如果有人可以为我提供创建、填充和读取哈希表内容的入门知识:我将不胜感激。

4

5 回答 5

59

NSDictionaryNSMutableDictionary

这是一个简单的例子:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:anObj forKey:@"foo"];
[dictionary objectForKey:@"foo"];
[dictionary removeObjectForKey:@"foo"];
[dictionary release];
于 2009-01-23T20:21:24.487 回答
12

您可以尝试使用NSHashTable

于 2011-07-08T13:15:29.083 回答
8

如果您正在使用 Leopard(和 Cocoa 的新垃圾收集),您还想看看NSMapTable

于 2009-01-23T22:10:52.613 回答
7

除了 NSDictionary,还可以查看 NSSet 以了解何时需要没有顺序且没有重复的集合。

于 2009-01-24T20:04:41.057 回答
3

使用iOS 6.0+ SDK 中的NSHashTable。哈希表是仿照 NSSet 建模的,但有以下区别: 它可以保存对其成员的弱引用。它的成员可以在输入时被复制,或者可以使用指针标识来进行相等和散列。它可以包含任意指针(其成员不限于对象)。

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

使用iOS 6.0+ SDK 中的NSMapTable。映射表是在 NSDictionary 之后建模的,但有以下区别: 键和/或值可选地“弱”保存,以便在回收对象之一时删除条目。它的键或值可以在输入时被复制,或者可以使用指针标识来进行相等和散列。它可以包含任意指针(其内容不限于对象)。

 id delegate = ...;
 NSMapTable *mapTable = [NSMapTable 
 mapTableWithKeyOptions:NSMapTableStrongMemory
                                         valueOptions:NSMapTableWeakMemory];
 [mapTable setObject:delegate forKey:@"foo"];
 NSLog(@"Keys: %@", [[mapTable keyEnumerator] allObjects]);
于 2018-01-24T22:22:46.750 回答