gpt4 book ai didi

swift - 字符串数组中的字符swift

转载 作者:行者123 更新时间:2023-11-28 15:46:43 24 4
gpt4 key购买 nike

我正在尝试查找组成字符串的字母的位置。例如,我需要知道字母“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

我从控制台得到的只有两个零;它只给我“字符”中第一个 c 的索引,而不是第二个 c。它打印出“错误的字母”这一事实意味着循环运行正确;它甚至可以识别第二个 c 的位置,只是没有给出正确的索引。

最佳答案

您的代码没有按预期工作,因为

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 }

如果字符串很大那么其他方法可能更适合,参见例如Find all indices of a search term in a string .

关于swift - 字符串数组中的字符swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42919976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com