【问题标题】:NSPredicate for filtering arrayNSPredicate 用于过滤数组
【发布时间】: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”——这是排序。

标签: swift nspredicate


【解决方案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"] :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多