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 用于过滤数组的主要内容,如果未能解决你的问题,请参考以下文章