2017-09-05 31 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"]]} }