String 如何在Swift中返回所有子字符串(多次)?
我有一个单词列表,我正试图将其匹配到Swift中的输入字符串中。例如,每当这些单词中的一个出现在字符串中时,我想打印它并将其添加到变量中。我已经能够确定这个词是否在句子中出现过一次,但不能确定它是否在字符串中出现过多次。这是我的密码String 如何在Swift中返回所有子字符串(多次)?,string,swift,substring,String,Swift,Substring,我有一个单词列表,我正试图将其匹配到Swift中的输入字符串中。例如,每当这些单词中的一个出现在字符串中时,我想打印它并将其添加到变量中。我已经能够确定这个词是否在句子中出现过一次,但不能确定它是否在字符串中出现过多次。这是我的密码 import Swift import Foundation var dictionary: [String] = ["blue", "red", "yellow", "green"] var count = dictionary.count var str
import Swift
import Foundation
var dictionary: [String] =
["blue",
"red",
"yellow",
"green"]
var count = dictionary.count
var string = "blue yellow red green blue red"
var value = 0
for var index = 0; index < count; index++ {
if string.lowercaseString.rangeOfString(dictionary[index]) != nil {
print("\(dictionary[index])")
value++
print("\(dictionary[index]) is a flagged word")
print(value)
}
}
导入Swift
进口基金会
变量字典:[字符串]=
[“蓝色”,
“红色”,
“黄色”,
“绿色”]
var count=dictionary.count
var string=“蓝黄红绿蓝红”
var值=0
对于var指数=0;指数<计数;索引++{
如果string.lowercasesetring.rangeOfString(字典[索引])!=nil{
打印(\(字典[索引])
价值观++
print(\(字典[索引])是一个带标记的单词)
打印(值)
}
}
这样做只会将值设置为4(应该是6),因为它只会对每个单词计数一次,并且会忽略其他蓝色和红色子字符串。有解决办法吗?我找不到有关此的任何信息,谢谢。最简单的方法是组合
由字符串分离的组件,并减少:
var count = string.componentsSeparatedByString(" ").reduce(0) {
words.contains($1) ? $0 + 1 : $0
}
虽然这与您的示例所做的事情并不完全相同,因为它假设您实际上在字典中查找单词。如果您实际上只是在查找字符串匹配,请尝试:
var count2 = words.map({
string.componentsSeparatedByString($0).count - 1
}).reduce(0, combine:+)
最简单的方法是组合由字符串分离的组件,并减少:
var count = string.componentsSeparatedByString(" ").reduce(0) {
words.contains($1) ? $0 + 1 : $0
}
虽然这与您的示例所做的事情并不完全相同,因为它假设您实际上在字典中查找单词。如果您实际上只是在查找字符串匹配,请尝试:
var count2 = words.map({
string.componentsSeparatedByString($0).count - 1
}).reduce(0, combine:+)
这可能会帮助你:太好了,它工作得很好…不知道我怎么会错过那一个你应该尽量避免使用for代码>循环,它将在Swift的未来版本中删除,并且非常不快速。相反,对于字典中的单词{…}
@KennethBruno,甚至对于字典中的单词
也应该使用映射
,平面映射
的某种形式或组合来替换,filter
和/或reduce
@DavidBerry我同意这些功能在很多情况下都很好,但为了清晰起见,在循环中使用for…也同样有效。这可以归结为编程风格。这可能会帮助你:完美,它工作得很好…不知道我怎么会错过那一个你应该尽量避免使用for代码>循环,它将在Swift的未来版本中删除,并且非常不快速。相反,对于字典中的单词{…}
@KennethBruno,甚至对于字典中的单词
也应该使用映射
,平面映射
的某种形式或组合来替换,filter
和/或reduce
@DavidBerry我同意这些功能在很多情况下都很好,但为了清晰起见,在循环中使用for…也同样有效。这可以归结为编程风格。第二个示例是执行此任务的一种聪明方法。然而,对于不熟悉这项技术的人来说,这可能是不可理解的,应该有一些解释。也许,在未来几年的swift发展中,我认为(希望)每个人都将足够熟悉swift的功能/声明机制(map、flatMap、filter、reduce)对这些结构的冗长解释将变得不必要:)我同意,它们非常强大和有用。如果使用得当,它们可以大大简化和澄清代码。在那之前,我们必须把它教给所有人!是的,一旦你理解了它们的含义,以及它们的普遍适用性,它几乎就变成了一个“非常糟糕”的时刻。第二个例子是执行这项任务的聪明方法。然而,对于不熟悉这项技术的人来说,这可能是不可理解的,应该有一些解释。也许,在未来几年的swift发展中,我认为(希望)每个人都将足够熟悉swift的功能/声明机制(map、flatMap、filter、reduce)对这些结构的冗长解释将变得不必要:)我同意,它们非常强大和有用。如果使用得当,它们可以大大简化和澄清代码。在那之前,我们必须把它教给所有人!是的,一旦你理解了它们的意思,以及它们的普遍适用性,它几乎就变成了一个“好无聊”的时刻。