gpt4 book ai didi

ios - 在给定字符串的数组中查找匹配项?

转载 作者:行者123 更新时间:2023-11-29 00:53:39 25 4
gpt4 key购买 nike

好吧,假设我有一个用于词汇单词、替代书写方式及其含义的自定义对象。

class VocabEntry {
var kanji:String?
var kana:String?
var meaning:String?
}

然后我有一个由这些对象组成的数组。这是一个例子。

let newVocabWord = VocabEntry()
newVocabWord.kanji = "下さい”
newVocabWord.kana = "ください”
newVocabWord.meaning = "please"

现在我有一串文本:

let testString = "すみません、十階のボタンを押して下さい"

如何将该字符串与我的自定义对象数组(包含字符串)进行比较并引用匹配项?

我试过了。

if vocabArray.contains( { $0.kanji == testString }) {
print("yes")
}

但是试图匹配整个字符串。如果我将 testString 更改为“下さい”,它会起作用,但这不是我想要的。我想要的是它说“我在 xx 对象中找到了下さい。这是索引号。”

最佳答案

您可以将 indexOf() 与谓词一起使用来查找 a 的索引匹配条目,以及 containsString() 来搜索子字符串。由于 kanji 属性是可选的,因此您必须通过以下方式检查:可选绑定(bind):

if let index = vocabArray.indexOf({ entry in
if let kanji = entry.kanji {
// check if `testString` contains `kanji`:
return testString.containsString(kanji)
} else {
// `entry.kanji` is `nil`: no match
return false
}
}) {
print("Found at index:", index)
} else {
print("Not found")
}

这可以写得更简洁

if let index = vocabArray.indexOf({
$0.kanji.flatMap { testString.containsString($0) } ?? false
}) {
print("Found at index:", index)
} else {
print("Not found")
}

要获取所有匹配条目的索引,可以使用以下方法:

let matchingIndices = vocabArray.enumerate().filter { (idx, entry) in
// filter matching entries
entry.kanji.flatMap { testString.containsString($0) } ?? false
}.map {
// reduce to index
(idx, entry) in idx
}
print("Found at indices:", matchingIndices)

关于ios - 在给定字符串的数组中查找匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37842100/

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