给定n个subArrays Sn的数组A,如何在Ruby中选择Sn [i]成员数组?

时间:2012-06-20 13:05:32

标签: ruby arrays multidimensional-array

给定n个subArrays Sn的数组A,如何在Ruby中选择Sn [i]成员数组?

例如,给定一个languages数组,如下所示:

languages = [ ['Italiano', 'it'], ["English", 'en'], ["Française", 'fr' ] ]

如何获取阵列......

locales_in_languages = ['it', 'en', 'fr' ]

...包含所有language[1]个对象?

是否有一种简单的' ruby​​sh' 方式来实现这一目标?

5 个答案:

答案 0 :(得分:5)

一般来说,它将是:

array.map { |subarray| subarray[i] }

如果您需要每个阵列的第一个(或最后一个)元素,您可以这样做:

array.map(&:first) # similar array.map(&:last)

请参阅Enumerable#map &:second方法。

顺便说一下,使用Rails,您还可以使用&:third&:fourth&:fifth,{{1}},甚至docs

答案 1 :(得分:3)

替代方案:

#encoding: utf-8
LANGUAGES = [ ['Italiano', 'it'], ["English", 'en'], ["Française", 'fr' ] ]
p LANGUAGES.transpose.last #=>["it", "en", "fr"]

答案 2 :(得分:3)

您可以使用Array#transpose方法执行此操作:

irb(main):014:0> languages = [ ['Italiano', 'it'], ["English", 'en'], ["Française", 'fr' ] ]
=> [["Italiano", "it"], ["English", "en"], ["Française", "fr"]]
irb(main):015:0> languages.transpose[1]
=> ["it", "en", "fr"]

答案 3 :(得分:1)

当然,它被称为map

languages = [ ['Italiano', 'it'], ["English", 'en'], ["Française", 'fr' ]]
languages.map{|name, code| code } # => ["it", "en", "fr"]

顺便说一句,调用你的数组LANGUAGES(全部大写)违反了ruby命名约定(除非它是常量。只有常量以大写字母开头)。

答案 4 :(得分:0)

Array.collect就可以了。

为了做一些红宝石的事情,没有必要让事情过于复杂.-