将字符串与数组进行比较并提取ruby

时间:2015-08-05 14:41:05

标签: ruby

我有以下字符串:

str = "This is a string"

我想要做的是将它与这个数组进行比较:

a = ["this", "is", "something"]

结果应该是包含"this""is"的数组,因为它们都存在于给定字符串中的数组中。字符串中不存在"something",因此不应出现。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

一种方法:

str = "This is a string"
a = ["this","is","something"]
str.downcase.split & a
# => ["this", "is"]

我假设数组a将始终具有小写的键(元素)。

答案 1 :(得分:1)

总有很多方法可以做这类事情

str = "this is the example string"
words_to_compare = ["dogs", "ducks", "seagulls", "the"]

words_to_compare.select{|word| word =~ Regexp.union(str.split) }
#=> ["the"]

答案 2 :(得分:0)

你的问题有XY problem气味。通常当我们想要找到存在的单词时,我们想知道的下一件事是它们存在多少次。频率计数遍布互联网和Stack Overflow。这是对这种事情的一个小修改:

str = "This is a string"
a = ["this", "is", "something"]

a_hash = a.each_with_object({}) { |i, h| h[i] = 0 } # => {"this"=>0, "is"=>0, "something"=>0}

定义了a_hash,其中键是要计算的单词。

str.downcase.split.each{ |k| a_hash[k] += 1 if a_hash.key?(k) }
a_hash # => {"this"=>1, "is"=>1, "something"=>0}

a_hash现在包含单词出现次数。 if a_hash.key?(k)是我们看到的与常规字数相比的主要区别,因为它只允许a中的字词出现字数。

a_hash.keys.select{ |k| a_hash[k] > 0 } # => ["this", "is"]

很容易找到共同的词,因为计数器是> 0

这是文本处理中一个非常常见的问题,因此很好知道它是如何工作的以及如何根据自己的意愿进行弯曲。