はじめに
多次元配列を1次元配列に変換するにはflatten
メソッドを使用すればよいですが、その逆の1次元配列を多次元配列にするメソッドはないなと思い、実装してみました。
多次元配列と言いながら、今回は2次元配列に変換する方法になります。
実装
.rb
puts "カンマ区切りで複数の数値を入力してください"
input_array = gets.chomp.split(",")
puts "2次元配列の行と列のどちらを固定しますか?('行'or'列'を入力してください)"
select = gets.chomp
# 列が選択されたときの行と列の数を算出
if select == "列"
puts "列数を入力してください"
new_column = gets.chomp.to_i # 2次元配列の列数
new_line = ((input_array.count)/new_column.to_f).ceil # 2次元配列の行数
end
# 行が選択されたときの行と列の数を算出
if select == "行"
puts "行数を入力してください"
new_line = gets.chomp.to_i # 2次元配列の行数
new_column = ((input_array.count)/new_line.to_f).ceil # 2次元配列の列数
end
# 2次元配列に変換
i = 0
new_array = []
while i < new_line do
new_array << input_array[(i*new_column)..(i*new_column + new_column - 1)] # 1次元配列から2次元配列の列数分の要素を取得して空配列に挿入
i += 1
end
puts "入力した1次元配列"
p input_array
puts "変換された2次元配列"
p new_array
流れとしては、以下のようになります。
- 1次元配列を入力
- 行数と列数のどちらを固定するのかを選択
- 行と列、それぞれの場合における行と列の数を算出する
- 1次元配列から、2次元配列の列数分の要素を取得して、空の配列に挿入する
- 4の操作を行数分繰り返す
さいごに
あまりきれいではないかもしれませんが、思いどおりの操作をすることができました。
(そもそも本記事の目的を達成するようなメソッドが既に存在しておりましたら、コメントでご教授いただけると嬉しいです。)