Dav*_*eek 4 arrays sorting string swift
鉴于以下内容:
var theArray: [String] = ["uncool", "chill", "nifty", "precooled", "dandy", "cool"]
我想根据单词与关键字的相似程度对数组进行排序.
var keyWord: String = "cool"
想要的结果是:
print// ["cool", "uncool", "precooled", ...]然后它就不再重要了.但are关键或contain it应该是第一个对象的话.
到目前为止,我最接近的尝试是:
let _theArray = entries.sorted { element1, element2 in
return element1.contains(keyWord) && !element2.contains(keyWord)
}
Run Code Online (Sandbox Code Playgroud)
但这导致uncool成为第一项,那么precooled最相关的项目cool甚至会出现nifty.
我错过了什么?非常感谢帮助.
Leo*_*bus 12
您可以定义自己的相似性排序方法.请注意,我还添加了一个hasPrefix优先级,而不是仅包含关键字的那个,如果你不想要它,你可以删除它:
let theArray = ["uncool", "chill", "nifty", "precooled", "cooldaddy", "cool", "coolguy", "dandy"]
let key = "cool"
let sorted = theArray.sorted {
if $0 == key && $1 != key {
return true
}
else if $0.hasPrefix(key) && !$1.hasPrefix(key) {
return true
}
else if $0.hasPrefix(key) && $1.hasPrefix(key)
&& $0.count < $1.count {
return true
}
else if $0.contains(key) && !$1.contains(key) {
return true
}
else if $0.contains(key) && $1.contains(key)
&& $0.count < $1.count {
return true
}
return false
}
print(sorted) // ["cool", "coolguy", "cooldaddy", "uncool", "precooled", "chill", "nifty", "dandy"]
Run Code Online (Sandbox Code Playgroud)