我有一个字符串&一个数组,我试图遍历数组,看看它的任何元素是否匹配字符串的一部分。
string = "HOPJYJKCONNECTICUTQZIDAHOKR"
states_array = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]
如何迭代states_array以便我可以找到字符串中的所有匹配项?我想将所有匹配的状态输出为数组&所以最终结果可能如下:
#=> ["CONNECTICUT", "IDAHO"]
答案 0 :(得分:5)
string = "HOPJYJKCONNECTICUTQZIDAHOKR"
states = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]
states.select { |s| string[s] }
# => ["IDAHO", "CONNECTICUT"]
答案 1 :(得分:2)
Matt的好解决方案,但也可以完成
states.select { |s| string.match(s)}
答案 2 :(得分:1)
由于您在此问题上指定了正则表达式标记,因此可以使用正则表达式进行如下操作:
string.scan(Regexp.new(states.join('|')))
# => ["CONNECTICUT", "IDAHO"]
使用Matt答案中的变量。但是,不建议这样做。 : - )
答案 3 :(得分:0)
这就像@ Peter_Alvin的回答一样,使用内置方法union
。
states_array = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]
str = "HOPJYJKCONNECTICUTQZIDAHOKR"
p str.scan(Regexp.union(states_array)) # ["CONNECTICUT", "IDAHO"]