我有一个关于过滤数组的问题。
我们假设我有一系列国家/地区名称:
let countries = [Albania, Bahrain, Barbados, Denmark, France, Zimbabwe]
现在我想过滤这个数组来检查它是否包含某个字符串让我们说“ba”。 我可以用
轻松完成countries = countries.filter{ $0.contains("ba")}
返回
Albania, Bahrain, Barbados, Zimbabwe
但实际上我希望字母的顺序很重要。因此,结果“阿尔巴尼亚”和“津巴布韦”不应该出现,只有“巴林”和“巴巴多斯”的名字以巴开头。
有没有办法做到这一点,以避免一个巨大的for循环通过所有entites单独检查每个角色?
答案 0 :(得分:3)
使用Cells(3, i * 2 - 1).Formula = "BDH(""A"" & "i * 2 - 1", ""A1"", ""B1"", "Today()")"
代替.hasPrefix
,如下所示:
.contains
请注意,这是区分大小写的。顺便说一句,在你的例子中,问题不是缺少字母顺序,而是print(countries.filter{ $0.hasPrefix("Ba") })
尊重案例的事实,就像swift中的大多数方法一样。
答案 1 :(得分:0)
您可以一步完成案例和过滤:
这会在应用过滤器测试之前对国家/地区名称进行小写,但不会更改原始数组,因此结果具有相同的大小写。
这很重要,因为为了便于阅读,您可能会错误地分两步执行此操作:
let countries = ["Albania", "Bahrain", "Barbados", "Denmark", "France", "Zimbabwe"]
let filtered = countries.filter { $0.lowercased().hasPrefix("ba") } // -> ["Bahrain", "Barbados"]
但是这会返回countries
.map { $0.lowercased()}
.filter { $0.hasPrefix("ba")}
,因为过滤器正在应用于现在小写的数组。