2016-08-28 1 views
1

Я хотел бы сравнить массив с элементом и извлечь эти данные в другом массиве Вот пример данных, с которыми я работаю:Поиск и извлечение результатов из массива на основе ключевого слова записи в 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 

ответ

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') 

Вы могли бы сгруппировать элементы совпадения по ключу (: матч), а затем получить результат с одним хэш-поиска.

+0

Спасибо, но 'key [: keyword] .include? (Keyword)' работает лучше для соответствия нескольких ключевых слов –

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"}]}] 

надежда, что поможет вам идет!

Смежные вопросы