首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据swift中的筛选器将列表拆分为两部分

根据swift中的筛选器将列表拆分为两部分
EN

Stack Overflow用户
提问于 2020-09-14 18:44:30
回答 3查看 41关注 0票数 0

有一个国家名称列表,如果我搜索一个以B开头的国家,如何拆分搜索,将所有以B开头的国家作为一个列表,将其余国家作为另一个列表,然后将这两个国家组合在一起,使以"B“开头的国家位于顶部

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-14 18:53:38

您可以使用sorted(by:)来实现您的目标。您只需使用prefix操作符检查当前元素和下一个元素是否以您的搜索词开头,如果当前元素以它开头,但下一个元素不是,则将当前元素排在下一个元素之前,否则保持当前顺序。

代码语言:javascript
运行
复制
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"]

票数 2
EN

Stack Overflow用户

发布于 2020-09-14 18:52:28

你的searchBar需要它吗?如果是,请尝试以下操作:

代码语言:javascript
运行
复制
let filteredCountries = CountriesArray.filter({ (country: String) -> Bool in
            return country.lowercased().contains(searchText.lowercased()) && country.hasPrefix(searchText)
        })

此外,要进行排序,请尝试以下命令:

代码语言:javascript
运行
复制
let sortedArray =  filteredCountries.sorted(by: { $0.lowercased() < $1.lowercased() })

即使您不需要在searchBar ()方法中使用它,也可以尝试使用它,它非常有用且易于使用。

票数 0
EN

Stack Overflow用户

发布于 2020-09-14 18:58:01

您也可以使用Dictionary进行拆分,它不会对键进行排序,但您可以使用分隔的数组:

代码语言:javascript
运行
复制
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"]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63882738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档