【问题标题】:Filtering with NSPredicate an Array of Array to see if It contains an Integer in Swift [duplicate]在 Swift 中使用 NSPredicate 过滤一个数组以查看它是否包含一个整数 [重复]
【发布时间】:2017-05-31 09:40:59
【问题描述】:

您好,我正在尝试更多地了解 NSPredicate,因为资源仍然基于 ObjC,所以它非常困难。如果可能的话,我想要一个快速的答案

基本上我正在尝试使用 NSPredicate 来查看下面的数组是否包含男性用户的代码编号“9”。 因此,我想过滤下面的people 数组,只保留包含数字 9 的数组。

var malePerson1:[Int] = [1,4,5,6,11,9]
var malePerson2:[Int] = [3,5,6,7,12,9]
var femalePerson3:[Int] = [3,5,6,7,12,10]

var people = [malePerson1, malePerson2, femalePerson3]

我使用过滤器使解决方案工作正常(见下文)

//Solution working with Filter
// male gender search
var result = people.filter{$0.contains(9)}
print(result)
var resultFemale = people.filter{$0.contains(10)}
print(resultFemale)

但是我如何使用谓词做类似的事情呢?

下面不起作用 - resultMale 在它应该包含两个数组时只返回一个空白数组:[maleperson1, maleperson2]。我认为问题在于它检查 9 是否包含在“人员”数组中,而不是检查包含数组的内容。

任何想法如何使用 NSPredicate 过滤数组中的整数?

let malePred = NSPredicate(format: "9 IN %@",people) 
//9 is the code for Male user
var resultMale = (people as NSArray).filtered(using: malePred)

【问题讨论】:

  • 这不是重复的 - 潜在的解决方案是目标 C(和非常古老的语法)这些解决方案不适用于 Swift
  • 谓词语法对于 Swift 和 Objective-C 是相同的。对于您的情况,无论您使用哪种语言,它都是“ANY self == value”。

标签: ios swift nspredicate


【解决方案1】:

您可以使用ANY 将每个嵌套数组与NSPredicate 进行比较。

let malePred = NSPredicate(format: "ANY self == 9")

【讨论】:

  • 真棒@Nirav。 - 出于兴趣,如果我想过滤 9、10 例如,它会起作用吗?任何自我 == [9, 10]"
  • @MobileBloke 欢迎朋友 :),您可以使用 IN let malePred = NSPredicate(format: "ANY self IN %@",[9, 10])
  • 糟糕! - 完毕 !谢谢您的帮助。你从哪里了解到所有关于谓词的知识?文档似乎很薄弱。
猜你喜欢
  • 2011-04-20
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多