字符串数组中的字符 swift
Character in String array swift
我正在尝试查找组成字符串的字母的位置。
例如,我需要知道字母 "c" 在单词 "character" 中的位置,以便进一步计算。
我试过了
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
我从控制台得到的只有两个零;它只给我 "character" 中第一个 c 的索引,而不是第二个 c 的索引。
它打印出 "wrong letter" 的事实意味着循环是正确的 运行;它甚至可以识别第二个 c 的位置,只是没有给出正确的索引。
你可以按照
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
您的代码没有按预期工作,因为
Array("character".characters).index(of: letters)
总是找到字符串中第 次出现的字母,例如
搜索 "c" 时,这将始终 return 索引为零。
您可以使用 enumerated()
来简化任务,
它为您提供字符以及相应的索引,
并且无需通过 index(of:)
进行所有 Array()
转换和搜索:
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 { [=12=].element == search }
.map { [=12=].offset }
print(indices) // [0, 5]
这可以进一步优化为
let indices = word.characters.enumerated()
.flatMap { [=13=].element == search ? [=13=].offset : nil }
如果字符串大那么其他方法可能更适合,
参见例如.
我正在尝试查找组成字符串的字母的位置。 例如,我需要知道字母 "c" 在单词 "character" 中的位置,以便进一步计算。
我试过了
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
我从控制台得到的只有两个零;它只给我 "character" 中第一个 c 的索引,而不是第二个 c 的索引。 它打印出 "wrong letter" 的事实意味着循环是正确的 运行;它甚至可以识别第二个 c 的位置,只是没有给出正确的索引。
你可以按照
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
您的代码没有按预期工作,因为
Array("character".characters).index(of: letters)
总是找到字符串中第 次出现的字母,例如 搜索 "c" 时,这将始终 return 索引为零。
您可以使用 enumerated()
来简化任务,
它为您提供字符以及相应的索引,
并且无需通过 index(of:)
进行所有 Array()
转换和搜索:
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 { [=12=].element == search }
.map { [=12=].offset }
print(indices) // [0, 5]
这可以进一步优化为
let indices = word.characters.enumerated()
.flatMap { [=13=].element == search ? [=13=].offset : nil }
如果字符串大那么其他方法可能更适合,
参见例如