2012-07-27 103 views
20

我有一個數組的數組:在Ruby中選擇數組數組中的一列中的所有元素?

arr = [["Foo1", "Bar1", "1", "W"], 
["Foo2", "Bar2", "2", "X"], 
["Foo3", "Bar3", "3", "Y"], 
["Foo4", "Bar4", "4", "Z"]] 

而且我想只包含每個陣列的第三列的數組:

res = ["1", "2", "3", "4"] 

我會怎麼做呢?

我想鍵入類似:

arr[][2] 

但思維更紅寶石般的,我想:

arr.select{ |r| r[2] } 

但這返回整行。

+1

您的意思是'arr.collect {| R | r [2]}'? – waldrumpus 2012-07-27 13:17:16

+0

你的'select'語句取第三個元素所有的行,這就是爲什麼你沒有得到預期的結果。 – 2012-07-27 13:22:12

回答

35

你想arr.map {|row| row[2]}

arr = [["Foo1", "Bar1", "1", "W"], 
["Foo2", "Bar2", "2", "X"], 
["Foo3", "Bar3", "3", "Y"], 
["Foo4", "Bar4", "4", "Z"]] 

arr.map {|row| row[2]} 
# => ["1", "2", "3", "4"] 
+7

或Rails/ActiveSupport的'arr.map(&:third)'。 – 2012-07-27 13:20:29

+1

''first''和'#last'在普通紅寶石中可用 – akostadinov 2016-01-15 08:55:45

1

使用地圖或收集 arr.map {| A | A [2]}

+1

'map'之前不需要'each'。 – 2012-07-27 13:20:51

13

另一種方法:

arr.transpose[2] 
+0

對於非常大的矩陣,可能'轉置'比'map {| r | r [2]}解決方案? – 2012-07-27 19:42:37

+0

@Jared Beck記憶我會說是,更貴。 – steenslag 2012-07-27 20:40:27

+0

謝謝,我很喜歡這個,因爲你可以在沒有塊的情況下使用它。如果還需要在第一列和第二列(就像我一樣),則可以使用轉置來一步設置「轉置」矩陣。 – Ninjaxor 2015-05-02 19:26:03

相關問題