gpt4 book ai didi

ios - 如何在 Swift 中使用 firstIndex 查找所有结果

转载 作者:行者123 更新时间:2023-12-01 15:41:03 25 4
gpt4 key购买 nike

我试图将一个字符串拆分成一个字母数组,但将一些字母放在一起。 (例如,我试图将它们分成发音组)。因此,举例来说,所有“sh”组合将是数组中的一个值而不是两个。

使用 firstIndex 很容易在我知道其中有一个“sh”的数组中找到一个“s”。但是,除了数组的第一个或最后一个索引,我如何才能获得更多信息呢?

Swift 文档包括这个例子:

let students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
if let i = students.firstIndex(where: { $0.hasPrefix("A") }) {
print("\(students[i]) starts with 'A'!")
}
// Prints "Abena starts with 'A'!"

如何同时获得 Abena 和 Akosua(以及其他,如果有的话?)

这是我的代码,它完成了一些我想要的(请原谅相当蹩脚的错误捕获)

let message = "she sells seashells"
var letterArray = message.map { String($0)}
var error = false

while error == false {
if message.contains("sh") {
guard let locate1 = letterArray.firstIndex(of: "s") else{
error = true
break }
let locate2 = locate1 + 1
//since it keeps finding an s it doesn't know how to move on to rest of string and we get an infinite loop
if letterArray[locate2] == "h"{
letterArray.insert("sh", at: locate1)
letterArray.remove (at: locate1 + 1)
letterArray.remove (at: locate2)}}
else { error = true }}
print (message, letterArray)

最佳答案

您将获得 Abena 和 Akosua(以及其他,如果有更多的话?)而不是首先使用过滤器。

   extension Array where Element: Equatable {
func allIndexes(of element: Element) -> [Int] {
return self.enumerated().filter({ element == $0.element }).map({ $0.offset })
}
}

然后你可以调用

letterArray.allIndexes(of: "s") // [0, 4, 8, 10, 13, 18]

关于ios - 如何在 Swift 中使用 firstIndex 查找所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61921297/

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