比较两个数组:一个包含单词,另一个包含短语。有些是由这些词组成的,有些不是

时间:2017-10-05 17:36:25

标签: arrays ruby regex

虽然我认为这样做比较简单,但它没有按预期工作。它们只能与正则表达式进行比较。 两个数组的外观示例:

第一个数组包含单词,如house,cat,dog等。第二个字符串包含短语“我有一个房子”,“我有一只猫”。所以重点是看第一个数组的哪些单词包含在第二个包含短语

的数组中

示例阵列词:{房子,狗,猫,男人,女孩等}

示例阵列短语:{“我有房子”,“我是狗”,“我是男人”等}

我已经完成了文档中的所有数组方法

https://docs.ruby-lang.org/en/2.0.0/Array.html

不是使用数组的减法来看差异,我们不是在谈论数字。它不是要检查是否包含了一些因为布尔值不是我的答案,而且,

我得到的糟糕和奇怪的结果是它打印出第二个数组的全部,好像第一个数组中的所有内容都包含在那里,但情况并非如此。

我尝试了3种变体,.each,select和for。

注意:如果不是使用变量而是硬编码我知道它是第二个数组的一部分的字符串,它会让我的结果很好。另外,如果我写一个变量并且我手动赋值它,例如:item = house并且它们将它放入正则表达式的模式中,它也可以工作!所以问题似乎是某些项目没有从第一个数组中提取,但事实并非如此,因为我尝试打印它们并打印出来。因此,如果它们是从第一个数组中正确提取的,并且如果我手动分配变量的值它们可以工作,为什么我不能自动将值分配给变量,因为它们来自第一个数组?这就是让我疯狂的原因。到目前为止8个小时。

代码不长,只有4行,我已经尝试了多种方法。 5实际上

取得第一名:

words= Array.new
File.open('mtos-array.txt').each { |line| linesdb << line }
phrases = Array.new
File.open('out23.txt').each { |line| fcia << line }

$x = 0
for item in words do
          for mto in phrases
             if(mto =~/#{item}/)         
             puts"it is contained in #{mto}"                 
             end
          end
        puts $x
        $x +=1

end

取两个号码

x = words.select {|num| num}
        phrases.each {|a|
            if(a =~/#{x}/)         
              puts"coincide com #{a}"                 
            end
}

这第三个非常紧凑也不起作用。它打印出第二个数组(linesdb)。如果x包含在v

中,我本来想要打印
x = words.select {|num| num}
   puts(phrases.select {|v| v =~ /#{x}/})    

采取数字4

这种有效的价值是有效的,只是我需要变量,但疯狂地让它们起作用。为了使它更清晰:假设单词house来自第一个数组,它确实找到了第二个数组中包含单词“house”的所有短语。

num = "house"
phrases.each {|a| if(a =~/#{num}/)        
         puts"coincide en #{a}"
     end
}

采取数字5 再次它打印出完整的第二个数组

for item in words do
phrases.each {|a| if(a =~/#{item}/)        
            puts"it is contained in en #{a}"
            end
            }
end

1 个答案:

答案 0 :(得分:0)

words = ["house", "dog", "cat", "man", "girl"]
phrases = ["I have a house", "I am a dog", "I am man"]

words.select { |word| phrases.any? { |phrase| phrase.include? word } }
 #=> ["house", "dog", "man"]