给定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' 方式来实现这一目标?
答案 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就可以了。
为了做一些红宝石的事情,没有必要让事情过于复杂.-