我有一个单词列表,我试图匹配到Swift中的输入字符串。例如,每当这些单词中的一个出现在字符串中时,我想打印它并将一个添加到变量中。我已经得到了能够确定单词是否出现在句子中一次,但是如果它在字符串中出现不止一次的话。这是我的代码......
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)
}
}
这样做只会将值设置为4(应该是6),因为它只计算每个单词一次并忽略其他蓝色和红色子串。这有解决方法吗?我找不到任何关于此的信息,谢谢。
答案 0 :(得分:2)
最简单的方法是合并componentsSeparatedByString
并减少:
var count = string.componentsSeparatedByString(" ").reduce(0) {
words.contains($1) ? $0 + 1 : $0
}
虽然这与您的示例完全不同,因为它假定您实际上在字典中查找单词。如果您实际上只是在寻找字符串匹配项,请尝试:
var count2 = words.map({
string.componentsSeparatedByString($0).count - 1
}).reduce(0, combine:+)