NSPredicate 用于过滤数组

Posted

技术标签:

【中文标题】NSPredicate 用于过滤数组【英文标题】:NSPredicate for filtering array 【发布时间】:2018-06-19 18:08:34 【问题描述】:

我被困在数组中的排序上。

我想按名称对数组进行排序:

var mesta: NSArray = ["ceska lipa", "budejovice", "liptakov"]
var zkouska = "lip"

let predicate = NSPredicate(format: "SELF contains %@", zkouska)
print(mesta.filter predicate.evaluate(with: $0))

它打印 [ceska lipa, liptakov],但我想先 liptakov,因为字母 lip 早于 ceska lipa

我想要结果 [liptakov, ceska lipa]

我试过了:

let predicate = NSPredicate(format: "SELF BEGINSWITH %@", zkouska)

但它只打印 liptakov

【问题讨论】:

谓词用于过滤。使用sort()进行排序。 对不起,我的意思是过滤 不要使用NSArray。使用 Swift 数组。 “但我想先 liptakov”——这是排序。 【参考方案1】:
var mesta = ["ceska lipa", "budejovice", "liptakov"]
var zkouska = "lip"

let filtered = mesta.filter  $0.contains(zkouska) 
let sorted = filtered.sorted 
    return $0.range(of: zkouska)!.lowerBound < $1.range(of: zkouska)!.lowerBound


print(sorted) // ["liptakov", "ceska lipa"]

【讨论】:

作为读者练习,更新代码以忽略变音符号和大小写。城市的名字实际上应该是["Česká Lípa", "Budějovice", "Liptákov"] :)

以上是关于NSPredicate 用于过滤数组的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate的使用

使用 NSPredicate 过滤数组

使用 NSPredicate 过滤包含字典的数组数组

使用 NSPredicate 过滤数组的 NSDictionary

使用 NSPredicate 搜索/过滤自定义类数组

我想要 swift3.0 的 NSPredicate 的数组过滤器数组