有一个国家名称列表,如果我搜索一个以B开头的国家,如何拆分搜索,将所有以B开头的国家作为一个列表,将其余国家作为另一个列表,然后将这两个国家组合在一起,使以"B“开头的国家位于顶部
发布于 2020-09-14 18:53:38
您可以使用sorted(by:)来实现您的目标。您只需使用prefix操作符检查当前元素和下一个元素是否以您的搜索词开头,如果当前元素以它开头,但下一个元素不是,则将当前元素排在下一个元素之前,否则保持当前顺序。
extension Array where Element == String {
/// Sorts the array based on whether the elements start with `input` or not
func searchSort(input: Element) -> Array {
sorted(by: { current, next in current.hasPrefix(input) && !next.hasPrefix(input) })
}
}
["Austria", "Belgium", "Brazil", "Denmark", "Belarus"].searchSort(input: "B")输出:["Belgium", "Brazil", "Belarus", "Austria", "Denmark"]
发布于 2020-09-14 18:52:28
你的searchBar需要它吗?如果是,请尝试以下操作:
let filteredCountries = CountriesArray.filter({ (country: String) -> Bool in
return country.lowercased().contains(searchText.lowercased()) && country.hasPrefix(searchText)
})此外,要进行排序,请尝试以下命令:
let sortedArray = filteredCountries.sorted(by: { $0.lowercased() < $1.lowercased() })即使您不需要在searchBar ()方法中使用它,也可以尝试使用它,它非常有用且易于使用。
发布于 2020-09-14 18:58:01
您也可以使用Dictionary进行拆分,它不会对键进行排序,但您可以使用分隔的数组:
let a = ["FF0000", "000000", "0083FF", "FBE58D", "7A9EB0", "909CE1"]
let b = Dictionary(grouping: a, by: { $0.first! })
print(b) //["0": ["000000", "0083FF"], "7": ["7A9EB0"], "F": ["FF0000", "FBE58D"], "9": ["909CE1"]]https://stackoverflow.com/questions/63882738
复制相似问题