2017-09-05 61 views
0

我有兩個數組,第一個數組包含字段名稱,類型和ID。Ruby按鍵值加入兩個數組

arr1 = [ 
      { 
       "n"=>"cat", 
       "t"=>0, 
       "id"=>"42WTd5" 
      }, 
      { 
       "n"=>"dog", 
       "t"=>0, 
       "id"=>"1tM5T0" 
      } 
     ] 

第二個數組包含字段,標識和值。

arr2 = [ 
     { 
      "42WTd5"=>"meow", 
      "1tM5T0"=>"woof" 
     } 
] 

如何通過id連接它們以產生以下結果。

cat: meow 
dog: woof 

任何幫助表示讚賞。

+0

你是什麼意思_produce_? –

+1

那是什麼結果?它是一個'String'值的數組(''「cat:meow」,「dog:woof」]')或者它是'Hash'('{cat:「meow」,dog:「woof」} ')還是隻是輸出或一個帶有換行符的單個'String'或一隻帶蝙蝠帽子的兔子? (請詳細解釋) – engineersmnky

+0

您遇到的問題是什麼?你的代碼有什麼問題?你有錯誤信息嗎?什麼是錯誤信息?你得到的結果不是你期待的結果嗎?你期望得到什麼結果?爲什麼?你得到的結果是什麼?兩者有什麼不同?你所觀察到的行爲不是所期望的行爲?什麼是期望的行爲,爲什麼,觀察到的行爲是什麼,以及它們以何種方式不同?請提供[mcve]。 [所以]不是「寫我的代碼給我的服務」!如果您正在尋找*那*,聘請程序員。 –

回答

0

這是一種方法。

sounds = arr2[0] 
results = arr1.map do |animal| 
    "#{animal["n"]}: #{sounds[animal["id"]]}" 
end 
puts results 
# => cat: meow 
# => dog: woof 

看起來像第二個數組應該只是一個散列而已。如果只有一個元素,那麼創建一個數組沒有意義,而且這個數字也不會改變。

毫無意義的一行(不要用這個)

puts arr1.map { |x| "#{x["n"]}: #{arr2[0][x["id"]]}" } 
1

我想你想你的結果是一個Hash,在這種情況下,這將做的工作:

def match_animals_to_sounds(animal_array, sound_array) 
    sounds = sound_array.first 
    animal_array.map { |animal| [animal['n'], sounds[animal['id']]] }.to_h 
end 

>> match_animals_to_sounds(arr1, arr2) 
=> {"cat"=>"meow", "dog"=>"woof"} 

arr2是不尋常的,因爲它是一個單一元素的數組。我只需撥打#first即可將哈希拉出。如果您期望此數組的某個版本將來有多個元素,則需要重新考慮此方法的第一行。

第二行是標準的Ruby數組操作。第一部分將每隻動物映射到一個新的包含每個動物名稱和聲音的雙元素陣列。最後,#to_h將這個兩元素數組的數組轉換爲單個哈希,這比字符串數組更有用。我不知道你的意圖是什麼,但這可能是你想要的。

如果你喜歡用符號來工作,你可以改變的方法來第二行:

animal_array.map { |animal| [animal['n'].to_sym, sounds[animal['id']].to_sym] }.to_h 

在這種情況下,您將獲得:

>> match_animals_to_sounds(arr1, arr2) 
=> {:cat=>:meow, :dog=>:woof} 
0

您還可以得到參加以下代碼導致的結果

arr1.collect{ |a| {a["n"] => arr2[0][a["id"]]} }