依赖顺序搜索数组

时间:2017-08-25 11:32:22

标签: swift

我有一个关于过滤数组的问题。

我们假设我有一系列国家/地区名称:

let countries = [Albania, Bahrain, Barbados, Denmark, France, Zimbabwe]

现在我想过滤这个数组来检查它是否包含某个字符串让我们说“ba”。 我可以用

轻松完成
countries = countries.filter{ $0.contains("ba")}

返回

Albania, Bahrain, Barbados, Zimbabwe

但实际上我希望字母的顺序很重要。因此,结果“阿尔巴尼亚”和“津巴布韦”不应该出现,只有“巴林”和“巴巴多斯”的名字以巴开头。

有没有办法做到这一点,以避免一个巨大的for循环通过所有entites单独检查每个角色?

2 个答案:

答案 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")} ,因为过滤器正在应用于现在小写的数组。