【问题标题】:Filtering NSArray of NSDictionaries by all occurrence of particular key通过特定键的所有出现过滤 NSDictionaries 的 NSArray
【发布时间】:2013-12-10 16:46:00
【问题描述】:

我一直在尝试解决这个问题,但到目前为止没有任何成功。

我知道如何使用 for 循环来解决这个问题,但我想使用 NSPredicate 来学习它

我有以下 NSDictionaries 的 NSArray

[ { "content"="content1", "path"="/usr/name/..." },
  { "content"="acontent2", "path"="/usr/name/..." },
  { "content"="content3", "path"="/usr/name/..." },
  { "content"="content14", "path"="/usr/name/..." } ]

我想为数组中的所有项目返回一个包含“内容”键的所有值的数组。即,回报应该是

[ "content1", "content2", "content3", "content4" ]

如何做到这一点?

谢谢

【问题讨论】:

  • 请注意,没有过滤因此不需要 NSPredicate。
  • 您的问题实际上似乎与过滤无关...

标签: objective-c


【解决方案1】:

你可以这样做:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"content =[cd] %@", @"content1"];
NSArray * array = [YourArray filteredArrayUsingPredicate:pred];

这将过滤您的数组以显示 content = content1 的所有值。 但这是为了过滤数组但你想要的输出:

[ "content1", "content2", "content3", "content4" ]

看起来更像是排序。

希望我向您解释了 NSPredictate 的工作原理。

【讨论】:

  • 恐怕这不会解决我的问题,因为它会返回某些内容值(在您的示例 content1 中),而不是我想要的所有内容值。我追求的不是排序,不是。
【解决方案2】:

只需使用valueForKey:

NSArray *contentItems = [array valueForKey:@"content"];

返回一个数组,其中包含调用 valueForKey 的结果:在数组的每个对象上使用键。
返回的数组包含每个返回 nil 的对象的 NSNull 元素。

【讨论】:

  • 这是一个有效的解决方案,它解决了我的谜团,尽管它没有使用谓词。我想知道是否有办法使用谓词来解决它:)
  • 谓词用于过滤,所以这是一个不同的问题,因为您没有过滤。过滤将是@Greg 的答案。您正在创建部分信息的完整列表。过滤将是所有信息的部分列表...
猜你喜欢
  • 1970-01-01
  • 2011-01-28
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多