检查数组是否包含字符串
Checking if an array contains a string
我正在尝试评估输入的字符串是否部分匹配数组中的任何项目。当我在操场上使用以下方法时,它似乎可以正常工作。但是,当我在 Xcode 9.0 beta 6 (9M214v) 中使用完全相同的方法时,它不会 return 正确答案。
func isValid(_ item: String) -> Bool {
let whitelist = ["https://apple.com","https://facebook.com","https://whosebug.com"]
return whitelist.contains(where: {[=10=] <= item ? true : false })
}
还有一些异常情况,比如当我传入“https://twitter.com”时,它会 return 为真。我疯了吗?当我在这里时,有人有不同的方法来解决这个问题吗?
只需 return 以下,将 return true
或 false
:
return whitelist.contains(item)
theres also anomalies like when I passed in "https://twitter.com"
it'll return true.
无论 Swift 的版本是 3 还是 4,根据您的代码片段,您应该得到 相同 true
结果!为什么?
因为contains(where:)
做比较的逻辑与给定元素相等的逻辑有关,即你不能使用contains
与不可等同的元素数组。为了更清楚:
"https://apple.com" <= "https://twitter.com"
"https://facebook.com" <= "https://twitter.com"
"https://whosebug.com" <= "https://twitter.com"
all 语句的结果将是 true
('t' 字符大于 'a'、'f' 和 's').
因此:
"https://zwebsite" <= "https://twitter.com"
会returnsfalse
('t'小于'z')。
但是,要获得预期的结果,您可以像这样实现函数:
func isValid(_ item: String) -> Bool {
let whitelist = ["https://apple.com","https://facebook.com","https://whosebug.com"]
return whitelist.contains { [=12=] == item }
}
或者更短的 contains
:
return whitelist.contains(item)
这导致
isValid("https://twitter.com")
到returnsfalse
.
我正在尝试评估输入的字符串是否部分匹配数组中的任何项目。当我在操场上使用以下方法时,它似乎可以正常工作。但是,当我在 Xcode 9.0 beta 6 (9M214v) 中使用完全相同的方法时,它不会 return 正确答案。
func isValid(_ item: String) -> Bool {
let whitelist = ["https://apple.com","https://facebook.com","https://whosebug.com"]
return whitelist.contains(where: {[=10=] <= item ? true : false })
}
还有一些异常情况,比如当我传入“https://twitter.com”时,它会 return 为真。我疯了吗?当我在这里时,有人有不同的方法来解决这个问题吗?
只需 return 以下,将 return true
或 false
:
return whitelist.contains(item)
theres also anomalies like when I passed in "https://twitter.com" it'll return true.
无论 Swift 的版本是 3 还是 4,根据您的代码片段,您应该得到 相同 true
结果!为什么?
因为contains(where:)
做比较的逻辑与给定元素相等的逻辑有关,即你不能使用contains
与不可等同的元素数组。为了更清楚:
"https://apple.com" <= "https://twitter.com"
"https://facebook.com" <= "https://twitter.com"
"https://whosebug.com" <= "https://twitter.com"
all 语句的结果将是 true
('t' 字符大于 'a'、'f' 和 's').
因此:
"https://zwebsite" <= "https://twitter.com"
会returnsfalse
('t'小于'z')。
但是,要获得预期的结果,您可以像这样实现函数:
func isValid(_ item: String) -> Bool {
let whitelist = ["https://apple.com","https://facebook.com","https://whosebug.com"]
return whitelist.contains { [=12=] == item }
}
或者更短的 contains
:
return whitelist.contains(item)
这导致
isValid("https://twitter.com")
到returnsfalse
.