如何在Swift中返回所有子串(不止一次)?

时间:2016-02-22 21:20:44

标签: string swift substring

我有一个单词列表,我试图匹配到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),因为它只计算每个单词一次并忽略其他蓝色和红色子串。这有解决方法吗?我找不到任何关于此的信息,谢谢。

1 个答案:

答案 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:+)