[英]HashTables in Cocoa
散列表/包含HashMap是一個最存在(如果不是最 )有用的數據結構的。 因此,在開始學習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]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.