我有以下字符串:
str = "This is a string"
我想要做的是将它与这个数组进行比较:
a = ["this", "is", "something"]
结果应该是包含"this"
和"is"
的数组,因为它们都存在于给定字符串中的数组和中。字符串中不存在"something"
,因此不应出现。我怎么能这样做?
答案 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
这是文本处理中一个非常常见的问题,因此很好知道它是如何工作的以及如何根据自己的意愿进行弯曲。