Arj*_*kar 10 cocoa dictionary objective-c data-structures
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];
Run Code Online (Sandbox Code Playgroud)
我想在c0和synckey之间进行转换,然后在其他字段中进行转换.
h4x*_*xxr 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];
Run Code Online (Sandbox Code Playgroud)
这个附加代码将返回一个包含1个字符串对象的数组,该对象评估为@"c7":
NSArray *keyArray = [fieldMap allKeysForObject:@"wi_prio"];
Run Code Online (Sandbox Code Playgroud)
[旁白:请注意,由于编译器的工作方式,这只适用于此; 它需要@"wi_prio"的所有出现并使它们成为同一个对象.如果你可能从磁盘上加载了字典等,这种方法对NSStrings不起作用.相反,你应该使用allKeys然后迭代它们,与之比较[mystring isEqualToString:anotherString].