给定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的事情,没有必要让事情过于复杂.-