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

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

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

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

我怎样才能获得数组……

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

…包含所有language[1]对象?

是否有一种简单的‘rubysh’方法来实现这一目标?

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

 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"] 

一般来说它将是:

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

如果您需要每个数组的第一个(或最后一个)元素,您可以执行以下操作:

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

请参阅Enumerable#map方法的文档 。

顺便说一下,使用Rails,您还可以使用&:second&:third&:fourth&:forty_two ,甚至&:forty_two

替代:

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

当然,它被称为map

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

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

Array.collect对此没问题。

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