Objective c Cocoa中的双向映射
Cocoa提供了NSDictionary,它本质上是一个关联数组 有没有一种很好的方法来获得双向关联性?i、 e.一种方法是,如果NSDictionary有一个反映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
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"];