0

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

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

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

我怎样才能获得数组...

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

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

有没有一种简单的“rubysh”方法来实现这一目标?

4

5 回答 5

5

一般来说,它将是:

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

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

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

有关方法,请参阅文档Enumerable#map

顺便说一句,在 Rails 中,您还可以使用&:second, &:third, &:fourth, &:fifth, 甚至&:forty_two.

于 2012-06-20T13:07:24.877 回答
3

替代:

#encoding: utf-8
LANGUAGES = [ ['Italiano', 'it'], ["English", 'en'], ["Française", 'fr' ] ]
p LANGUAGES.transpose.last #=>["it", "en", "fr"]
于 2012-06-20T13:18:37.060 回答
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"]
于 2012-06-20T13:19:23.233 回答
1

没错,就是叫map

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

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

于 2012-06-20T13:07:27.873 回答
0

Array.collect 可以。

在尝试以红宝石方式做事时,没有必要让事情变得过于复杂。-

于 2012-06-20T13:07:56.393 回答