在Ruby中从散列数组创建一个数组

3
我有一组哈希数组。
兔子 = [{:color=>"blue", :height=>5, :name=>"Charles"}, {:color=>"red", :height=>12, :name=>"Henry"}, {:color=>"green", :height=>7, :name=>"Francis"}, {:color=>"purple", :height=>3, :name=>"William"}]
如何从这个数组中创建一个只包含 :height 的数组?
我尝试了:兔子.map(&:height) 和 兔子.map{|i| i.height},但都没有成功。
目标是得到 height_array = [5, 12, 7, 3]。
3个回答

6

这会起作用。

rabbits.map{|c| c[:height] }

你尝试的另外两种方法期望c上有一个名为height的方法,但实际上并不是这样。

非常感谢!我尝试过了,但没有将其存储为新数组。因此,当我尝试在下一行打印cats时,它会给我原始的结果。再次感谢。 - rguerrettaz
要重写原始数组,请使用cat.map! ...(注意感叹号)。但我会将其保存到另一个变量中,ages = cats.map ... - Sergio Tulentsev
谢谢Sergio。我不知道那个。答案被接受了。 :) - rguerrettaz
我被要求编辑这个问题,因为它是编码挑战的一部分,策展人担心未来的学生会找到它并将其用作答案。cats.map 应该等于 rabbits.map,而 cats_age 应该等于 height。对此给您带来的不便深感抱歉。:( - rguerrettaz

0
rabbits.inject([]) {|height,hash| height << hash[:height]}

在这里使用inject似乎有点过头了 :) - Sergio Tulentsev
确实如此,只是作为一个选项列出。 - saihgala
@AshishSaihgal 我被要求编辑这个问题,因为它是编程挑战的一部分,策展人担心未来的学生会找到它并将其用作答案。cats.inject 应该等于 rabbits.inject,而 cats_age 应该等于 height。对此给您带来的不便深感抱歉。 :( - rguerrettaz

0
arr = cats.collect{|c| c[:cats_age] }

1
这不就是“map”的别名吗? :) - Sergio Tulentsev
@Salil 我被要求编辑这个问题,因为它是编程挑战的一部分,策展人担心未来的学生会找到它并将其用作答案。cats.collect 应该等于 rabbits.collect,而 cats_age 应该等于 height。对此给您带来的不便深感抱歉。 :( - rguerrettaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接