2017-09-05 14 views
0

私は2つの配列を持っています。最初の配列にはフィールド名、型、およびIDが含まれています。Rubyが2つの配列をキー値で結合する

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

第2の配列にはフィールド、ID、値が含まれています。

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

どのようにIDで結合して、次の結果を得ることができますか?

cat: meow 
dog: woof 

助けてください。

+0

_produce_とはどういう意味ですか? –

+1

その結果は何ですか?それは 'String'値(' 'cat:meow"、 "dog:woof") 'の' '配列' 'であるか' 'ハッシュ' '(' {cat: "meow"、dog: "woof"}ですか? ')か、それだけで出力されるか、新しい改行を持つ単一の' String'か、バットのある帽子のウサギですか? (説明してください) – engineersmnky

+0

あなたは問題を抱えているコードは何ですか?あなたのコードにはどんな問題がありますか?エラーメッセージが表示されますか?エラーメッセージとは何ですか?結果はあなたが期待している結果を得ていないのですか?あなたはどんな結果を期待していますか、そしてなぜ、あなたはどのような結果を得ていますか、そしてその二つの違いは何ですか?あなたが観察している行動は、望ましい行動ではありませんか?望ましい行動とは何か、なぜ行動が観察され、どのように違うのですか? [mcve]を提供してください。 [so]は "私のためのコードを書く"ではありません! * that *を探しているなら、プログラマーを雇う。 –

答えて

0

これはこれを行う方法です。

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

代わりに2番目の配列のように見えます。その中に要素が1つしかなく、その数が変更されない場合は、配列を作成する必要はありません。

私はあなたの結果は、この仕事をすることになる場合には、ハッシュ、なりたいと思う

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

(これは使用しないでください)ワンライナー無意味:

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と呼んでいます。この配列のいくつかのバージョンが将来、複数の要素を持つことが予想される場合、このメソッドの最初の行を再考する必要があります。

2行目は、標準のRuby Array操作です。最初の部分は、それぞれの動物を、各動物の名前とサウンドを含む2要素配列の新しい配列にマップします。最後に#to_hは、この2要素配列の配列を単一のHashに変換します。これは文字列の配列よりはるかに便利です。私はあなたの質問であなたが意図したものか分からないが、これはおそらくあなたが望むものである。

あなたはシンボルで作業する場合は、あなたがメソッドの2行目を変更することができます:

あなたが得るでしょう。その場合には
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"]]} } 
関連する問題