根据ruby中的entry关键字从数组中搜索和提取结果

时间:2016-08-28 23:39:06

标签: ruby-on-rails arrays ruby

我想将一个数组与一个元素进行比较,然后在另一个数组中提取这些数据 以下是我正在使用的数据示例:

Array = [{:id=>3, :keyword=>"happy", :Date=>"01/02/2016"},
         {:id=>4, :keyword=>"happy", :Date=>"01/02/2016"} ... ]

例如,我希望第一个关键字很乐意搜索同一个数组,如果有任何相似的单词,并将它们放在另一个数组中,这就是我正在寻找最终结果:

Results = [{:keyword=>happy, :match =>{ 
           {:id=>3, :keyword=>"happy", :Date=>"01/02/2016"}... }]

以下是代码的第一部分:

 def relationship(file)
    data     = open_data(file)
    parsed   = JSON.parse(data)
    keywords = []
    i = 0
    parsed.each do |word|
    keywords << { id: i += 1 , keyword: word['keyword'].downcase, Date:     word['Date'] }
    end
end

2 个答案:

答案 0 :(得分:1)

def search_keyword(keyword)
    hash = [
        {:id=>1, :keyword=>"happy", :Date=>"01/02/2015"},
        {:id=>2, :keyword=>"sad", :Date=>"01/02/2016"},
        {:id=>3, :keyword=>"fine", :Date=>"01/02/2017"},
        {:id=>4, :keyword=>"happy", :Date=>"01/02/2018"}
    ]
    keywords = []
    hash.each do |key|
        if key[:keyword] == keyword
            keywords << key
        end
    end
    keywords
    #{:keyword=> keyword, :match=> keywords}
end

search_keyword('fine')
#search_keyword('sad')

您可以按键(:匹配)对匹配元素进行分组,然后使用单个哈希查找来获取结果。

答案 1 :(得分:1)

这是另一个可以使用枚举和索引来帮助您解决问题的想法:

要搜索的数组:

array = [
        {:id=>3, :keyword=>"happy", :Date=>"01/02/2016"},
        {:id=>4, :keyword=>"happy", :Date=>"01/02/2016"},
        {:id=>1, :keyword=>"happy", :Date=>"01/02/2015"},
        {:id=>2, :keyword=>"sad",   :Date=>"01/02/2016"},
        {:id=>30, :keyword=>"fine", :Date=>"01/02/2017"},
        {:id=>41, :keyword=>"happy", :Date=>"01/02/2018"}
  ]

方法搜索: 存储与数组中的术语匹配的所有元素。

def search(term, array)
    array = []
    array << {keyword: "#{term}", match: []}
    arr.select { |element| array.first[:match] << element if element[:keyword].index(term) }
    array
end

<强>测试

  p search('sa', array)
  # => [{:keyword=>"sa", :match=>[{:id=>2, :keyword=>"sad", :Date=>"01/02/2016"}, {:id=>21, :keyword=>"sad", :Date=>"01/02/2016"}]}]
希望能帮助你!