Objective c Cocoa中的双向映射

Objective c Cocoa中的双向映射,objective-c,cocoa,data-structures,dictionary,Objective C,Cocoa,Data Structures,Dictionary,Cocoa提供了NSDictionary,它本质上是一个关联数组 有没有一种很好的方法来获得双向关联性?i、 e.一种方法是,如果NSDictionary有一个反映objectForKey:行为的keyForObject:方法 我真的不在乎字典是否是得到这个的方法。我知道NSDictionary确实提供了keysOfEntriesPassingTest:,但它返回了一个NSSet*,对于我想要的东西,它看起来不是很干净 以下是一个例子: fieldMap = [[NSDictionary all

Cocoa提供了NSDictionary,它本质上是一个关联数组

有没有一种很好的方法来获得双向关联性?i、 e.一种方法是,如果NSDictionary有一个反映
objectForKey:
行为的
keyForObject:
方法

我真的不在乎字典是否是得到这个的方法。我知道NSDictionary确实提供了
keysOfEntriesPassingTest:
,但它返回了一个
NSSet*
,对于我想要的东西,它看起来不是很干净

以下是一个例子:

fieldMap = [[NSDictionary alloc] initWithObjectsAndKeys:
    @"c0",@"synckey",
    @"c1",@"wi_id",
    @"c2",@"wi_parent_id",
    @"c3",@"wi_type",
    @"c4",@"wi_rh_task",
    @"c5",@"decision_key",
    @"c6",@"wi_stat",
    @"c7",@"wi_prio",
    @"c8",@"wi_cd",
    @"c9",@"wi_ct",
    @"cb",@"wi_dh_stat",
    @"cc",@"wi_user",
    nil];

我想在c0和synckey之间进行转换,然后返回,其他字段也一样。

框架有。

最接近您的目标是,我相信
allKeysForObject:
。这将返回一个NSArray,其中包含与字典中给定对象的所有匹配项相对应的键。显然,如果对象只在字典中出现一次,那么NSArray将只包含一个对象

以你的例子来说:

fieldMap = [[NSDictionary alloc] initWithObjectsAndKeys:
    @"c0",@"synckey",
    @"c1",@"wi_id",
    @"c2",@"wi_parent_id",
    @"c3",@"wi_type",
    @"c4",@"wi_rh_task",
    @"c5",@"decision_key",
    @"c6",@"wi_stat",
    @"c7",@"wi_prio",
    @"c8",@"wi_cd",
    @"c9",@"wi_ct",
    @"cb",@"wi_dh_stat",
    @"cc",@"wi_user",
    nil];
此附加代码将返回一个数组,该数组包含一个字符串对象,其值为@“c7”:


[旁白:注意,这只在这里起作用,因为编译器是如何工作的;它需要所有出现的@“wi_prio”并使它们成为相同的对象。如果您可能从磁盘等加载了字典,这种方法将不适用于NSString。相反,您可能应该使用
所有键
,然后与
[mystring IsequalString:anotherString]
相比,对它们进行迭代

CHDataStructures似乎还有很多其他有用的东西。我将继续并包括它。
NSArray *keyArray = [fieldMap allKeysForObject:@"wi_prio"];