2

我在我的应用程序中遇到了一个需要双向字典数据结构的情况,这意味着一种 NSDictionary ,您可以在其中检索带有值的键和带有键的值(所有值和键都是唯一的)。

C/ObjectiveC 中是否有这种数据结构?

4

2 回答 2

3

您可以使用NSDictionary

allKeysForObject:返回一个新数组,其中包含与字典中给定对象的所有出现对应的键。

  • (NSArray *)allKeysForObject:(id)anObject 参数 anObject 要在字典中查找的值。返回值 一个新数组,其中包含对应于字典中所有出现的 anObject 的键。如果没有找到与 anObject 匹配的对象,则返回一个空数组。

讨论 字典中的每个对象都被发送一个 isEqual: 消息以确定它是否等于一个对象。

和:

objectForKey:返回与给定键关联的值。

  • (id)objectForKey:(id)aKey 参数 aKey 要为其返回相应值的键。返回值 与 aKey 关联的值,如果没有与 aKey 关联的值,则返回 nil。
于 2013-07-18T08:24:06.793 回答
1

从字面上看,答案是否定的。

作为一种解决方法,您可以创建一个管理两个字典的助手类​​。

另一种方法是在 C++ 容器周围创建一个薄包装器,实现这一点:boost 的Bimap

当使用 ARC 和 Objective-C 对象作为 C++ 容器中的值或键时,它们将很好地处理 NSObjects。也就是说,它们会像您期望的那样处理内存管理——您甚至可以免费获得“异常安全”。此外,C++ 标准容器也更快一点,使用更少的内存,并提供更多的优化选项(例如自定义分配器)。

于 2013-07-18T08:42:42.750 回答