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

の可能重複〔どのように私は、Sn \の配列を選択することができ、n個のサブアレイのSnのアレイAを考える[I \] Rubyでのメンバー?](http://stackoverflow.com/questions/11120244 /与えられた配列のn個のサブアレイ - sn-how-can-i-select-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を使用することができます:読み取り、&:first構文について

arr.collect(&: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] 
関連する問題