我想将一个数组与一个元素进行比较,然后在另一个数组中提取这些数据 以下是我正在使用的数据示例:
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
答案 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"}]}]
希望能帮助你!