我试图找到构成字符串的字母的位置。 例如,我需要知道这封信的位置" c"在单词"字符"进一步计算。
我试过
for letters in Array("character".characters) {
if "c".contains(String(letters)) {
if let i = Array("character".characters).index(of: letters) {
print(i)
}
} else { print("wrong letter") }
}
// Console:
0
wrong letter
wrong letter
wrong letter
wrong letter
0
wrong letter
wrong letter
wrong letter
我从控制台得到的只是两个零;它只给了我第一个c"字符"的索引。但不是第二个c。 事实上,它打印出错误的字母"表示循环正常运行;它甚至可以识别第二个c的位置,它只是没有给出正确的索引。
答案 0 :(得分:1)
您的代码无法按预期运行,因为
Array("character".characters).index(of: letters)
始终在字符串中找到字母的第一个出现位置,例如 当搜索“c”时,这将始终返回索引零。
您可以使用enumerated()
简化任务,
它为你提供了相应的索引,
并进行所有Array()
次转化并通过index(of:)
进行搜索:
let word = "character"
let search = Character("c")
for (index, letter) in word.characters.enumerated() where letter == search {
print(index)
}
// 0 5
或者,如果您希望将索引作为数组:
let indices = word.characters.enumerated()
.filter { $0.element == search }
.map { $0.offset }
print(indices) // [0, 5]
这可以进一步优化
let indices = word.characters.enumerated()
.flatMap { $0.element == search ? $0.offset : nil }
如果字符串 large ,则其他方法可能更适合, 见例如Find all indices of a search term in a string
答案 1 :(得分:0)
你可以这样做
let test = "character"
let arr = Array(test.characters)
for i in 0..<arr.count {
if arr[i] == "c"{
print(i)
} else { print("wrong letter") }
}
output
// 0
//wrong letter
//wrong letter
//wrong letter
//wrong letter
//5
//wrong letter
//wrong letter
//wrong letter