Ruby行から列を取得

September 30th, 2021

目次

行列データの例

012
345
678

行をrow、列をcolumn として表現してみます。

行ごとにデータをまとめる

9つの要素持つ配列を3ごとの要素に区切って配列を作ります。

各配列を一つの配列に保持させます。

array = [0, 1, 2, 3, 4, 5, 6, 7, 8]

# その1
rows = []
array.each_slice(3) {|row| rows << row}
p rows
# [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

# その2
rows = array.each_slice(3).select {|row| row}
p rows
# [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

列のデータを取得

気合いで列のデータを取得

# 行のデータ
rows = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

# 列のデータ
columns = []
rows.size.times {columns << []}

rows.each do |arr|
  arr.each_with_index {|e, i| columns[i] << e}
end

p columns
# [[0, 3, 6], [1, 4, 7], [2, 5, 8]]

transposeを使う

# 行のデータ
rows = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

# 列のデータ
columns = rows.transpose
p columns
# [[0, 3, 6], [1, 4, 7], [2, 5, 8]]