此函数接受两个字符串参数。它应该以破折号返回第一个,除非该字符在第二个参数内的某处。例如:
dashes_except("hello", except: "lo") -> --llo
当except参数只有一个字母但在长度超过1时失败,该函数正常工作。它只是返回破折号。我对Swift很陌生,所以一些帮助会非常受欢迎!
以下是代码:
func dashes_except(word: String,except: String) -> String {
var loc = [String]()
for (index, character) in enumerate(word) {
loc.append(String(character))
}
var loc_except = [String]()
for (index, character) in enumerate(except) {
loc_except.append(String(character))
}
for x in 0..<loc.count {
for y in 0..<loc_except.count {
if loc[x] != loc_except[y] {
loc[x] = "-"
}
}
}
return "".join(loc)
}
答案 0 :(得分:4)
在内循环中
for y in 0..<loc_except.count {
if loc[x] != loc_except[y] {
loc[x] = "-"
}
}
loc[x]
被短划线取代&#34; - &#34;如果它与任何不同
loc_except
中的字符。如果是这样的话总会如此
异常字符串至少有两个不同的字符。
您可以使用contains()
:
for x in 0..<loc.count {
if !contains(loc_except, loc[x]) {
loc[x] = "-"
}
}
话虽如此,你的功能可以简洁地写成
func dashes_except(word: String,except: String) -> String {
return String(Array(word).map( { contains(except, $0) ? $0 : "-" } ))
}
在这里,
Array(word)
创建一个包含所有字符的数组
字符串(你用enumerate()
循环做了什么),map { }
替换未包含的所有字符
短划线的例外字符串和String( ... )
再次将字符数组转换为字符串
(你对"".join()
做了什么)。