簡體   English   中英

可可中的HashTables

[英]HashTables in Cocoa

散列表/包含HashMap是一個最存在(如果不是 )有用的數據結構的。 因此,在開始學習Cocoa編程時我研究的第一件事就是如何從哈希表中創建,填充和讀取數據。

令我驚訝的是:我在Cocoa / Objective-C編程上閱讀的所有文檔似乎都沒有解釋這么多。 作為一個使用“java.util”的Java開發人員,好像它是一個身體功能:我完全被這個困惑了。

所以,如果有人能夠為我提供創建,填充和閱讀哈希表內容的入門知識:我將非常感激。

NSDictionaryNSMutableDictionary

這是一個簡單的例子:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM