[ios]NSDictionary 使用不同的密钥的密钥访问值

发布时间: 2017/3/21 22:46:54
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

花了一个星期,使用 stackoverflows 搜索,但没有运气......

这里是我的有︰

1 plist:

<plist version="1.0">
  <array>  
    <dict>
      <key>name</key>
      <string>Name 1</string>
      <key>abrev</key>
      <string>(HGB, ΗbA)</string>
      <key>picture</key>
      <string>first.png</string>
      <key>pictureHeight</key>
      <integer>1686</integer>
    </dict>
    <dict>
      <key>name</key>
      <string>Name 2</string>
      <key>abrev</key>
      <string> </string>
      <key>picture</key>
      <string>second.png</string>
      <key>pictureHeight</key>
      <string>396</string>
    </dict>
    <dict> 
     ...
    <dict>
  </array>
</plist>

问题是︰
如何返回键"图片"和"pictureHeight"的值
知道"名称"键的值。

我试着像这样,但拼命失败......

//creating an array that contains the plist

dictArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle]  
        pathForResource:@"table1" ofType:@"plist"]];

//creating an array that contains only the vlaues for key "name"

NSMutableArray *temp = [dictArray valueForKey:@"name"];

//searchedData - an NSMutableArray containing the "name" values that  
//the user searched using the searchbar

for (i=0; i<[searchedData count]; ++i) 
{
    if ([searchedData containsObject:[temp objectAtIndex:i]]) 
    {
        [temp removeObjectAtIndex:i];
    }
}

最后我有一个关键的"名称"的值的数组,我需要得到的"图片"和"pictureHeight"以将所有这些信息推送到下一个视图控制器...

因为我不太远的我要我要的任何新的想法 (或也许教程),......

解决方法 1:

使用 NSPredicate 和 NSArray 的 filteredArrayUsingPredicate︰ 在哪里 '名称' 键的值匹配,无论您正在寻找的数组中选择词典的方法。然后您可以查询产生的词典或字典通常的方式,即使用 objectForKey:。

NSPredicate 是非常强大,值得花时间它会带你去学会使用它,但它确实需要一些研究。如果你想要什么,更容易实现一些但不那么优雅,只需遍历数组自己︰

NSMutableArray *matches = [NSMutableArray array];
for (NSDictionary *d in searchedData) {
    if ([name isEqualToString: [d objectForKey:@"name"]]) {
        [matches addObject:d];
    }
}

又在此基础上,到头来你与一个数组,包含 '名字' 与你正在寻找的名称相匹配的词典,你可以得到他们的其他属性通常的方式。

赞助商