11

我正在使用Ruby on Rails 3.2.2和Ruby 1.9.2。如何從智能方式中「提取」多維數組中的值?

鑑於以下多維Array

[["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 

我想獲得(:我想 「提取」 只是所有的 「嵌套」 Array S的第一個值):

["value1", "value2", "value3"] 

如何以智能的方式做到這一點?

+1

的可能重複的[給定n的子陣列的Sn的陣列的,如何可以選擇的Sn \ [的陣列I \]成員紅寶石?](http://stackoverflow.com/questions/11120244 /給出陣列的一個n陣列 - sn-how-can-i-select-array-of-sni-members) –

+0

@ KL-7 - 你說的對,但我沒有找不到你之前鏈接的問題發佈新問題。 – user12882

回答

23

您可以使用Array#collect爲外部數組的每個元素執行塊。要獲取第一個元素,傳遞索引數組的塊。

arr.collect {|ind| ind[0]} 

在使用中:

 
arr = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
=> [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
arr.collect {|ind| ind[0]} 
=> ["value1", "value2", "value3"] 

相反的{|ind| ind[0]},你可以用Array#first讓每個內部數組的第一個元素:

arr.collect(&:first) 

對於&:first語法,閱讀「Ruby/Ruby on Rails ampersand colon shortcut」。

2
>> array = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
=> [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
>> array.map { |v| v[0] } 
=> ["value1", "value2", "value3"] 
+0

澄清一下,'arr.map'和'arr.collect'沒有區別。請參閱http://stackoverflow.com/questions/5254732/difference-between-map-and-collect-in-ruby – forforf

1
arr = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 

Solution1 = arr.map {|elem| elem.first} 

Solution2 = arr.transpose[0]