Cocoa提供NSDictionary,它基本上是一个关联数组。
有一种获得双向关联性的好方法吗?也就是说,如果NSDictionary有一个keyForObject:
方法来反映objectForKey:
的行为,那就有一种方法。
我真的不在乎NSDictionary是不是这样的方法。我知道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 之间进行翻译,然后返回其他字段。
答案 0 :(得分:10)
你所追求的最接近的是,我相信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];
这个附加代码将返回一个包含1个字符串对象的数组,该对象评估为@“c7”:
NSArray *keyArray = [fieldMap allKeysForObject:@"wi_prio"];
[旁白:请注意,由于编译器的工作原理,这只适用于此;它需要@“wi_prio”的所有出现并使它们成为同一个对象。如果你可能从磁盘上加载了字典等,这种方法对NSStrings不起作用。相反,你应该使用allKeys
,然后与[mystring isEqualToString:anotherString]
进行比较,然后迭代它们。]
答案 1 :(得分:8)