HashTables/HashMaps 是现有数据结构中最有用的(如果不是最有用的话)之一。因此,当我开始学习 Cocoa 编程时,我研究的第一件事就是如何从哈希表创建、填充和读取数据。
令我惊讶的是:我一直在阅读的关于 Cocoa/Objective-C 编程的所有文档似乎根本没有解释这么多。作为一个使用“java.util”就好像它是一个身体功能的Java开发人员:我对此完全感到困惑。
因此,如果有人可以为我提供创建、填充和读取哈希表内容的入门知识:我将不胜感激。
HashTables/HashMaps 是现有数据结构中最有用的(如果不是最有用的话)之一。因此,当我开始学习 Cocoa 编程时,我研究的第一件事就是如何从哈希表创建、填充和读取数据。
令我惊讶的是:我一直在阅读的关于 Cocoa/Objective-C 编程的所有文档似乎根本没有解释这么多。作为一个使用“java.util”就好像它是一个身体功能的Java开发人员:我对此完全感到困惑。
因此,如果有人可以为我提供创建、填充和读取哈希表内容的入门知识:我将不胜感激。
NSDictionary和NSMutableDictionary?
这是一个简单的例子:
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:anObj forKey:@"foo"];
[dictionary objectForKey:@"foo"];
[dictionary removeObjectForKey:@"foo"];
[dictionary release];
您可以尝试使用NSHashTable!
如果您正在使用 Leopard(和 Cocoa 的新垃圾收集),您还想看看NSMapTable。
除了 NSDictionary,还可以查看 NSSet 以了解何时需要没有顺序且没有重复的集合。
使用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]);