2次元配列のeachとselect

二次元配列をeachで回し、別の二次元配列と比較するという処理を読んで、「こんなことができるのか〜」と思ったのでその内容を書き留めておきます!

 

 

処理の内容

以下のような2つの2次元配列があり、その中身の配列が一致するものを判別したいという状況でした。

 

arry1 = [ [nil, 963, 2455],
  [nil, 963, 2992],
  [nil, 963, 1240],
  [nil, 963, 1390],
  [nil, 963, 1299] ]

 

arry2 = [ [nil, 963, 2455],
  [nil, 963, 2992],
  [nil, 963, 1241],
  [nil, 963, nil],
  [nil, 963, 1299] ]

 

実装

実際の実装とは違いますが、だいたい以下のような感じでした。

arry = []

arry1.each do |one, two, three|

  if three != nil

    arry <<  arry2.select {|(_, _, id)| id == three }

  end

end

 

 

新しく知ったこと 
  • 2次元配列をeach1回で回せる

eachを2回まわす必要があるかと思ったのですが、

上記のように引数を複数渡してあげると一気に配列の中の配列まで実行できるようです!!

qiita.com

 

  • 引数に括弧を使用して多次元配列の要素を調べることができる

arry2.select {|(_, _, id)| id == three } というように、block引数に括弧を使用して2次元配列の中の要素について調べることができるようです!!

codeday.me

 

 

 

感想その他

2次元配列も簡潔に扱うことができて便利だなと思いました!