初学者向けの記事です。簡単なコーディング問題で学習したのでメモ的に。
※当初「Array.newで異なる値を持つ配列は作成出来ない」という記事でしたが、訂正しました。
Array.new(n)
は、指定された要素数 n
で新しい配列を作成するRubyのメソッドです。このメソッドは、n
を引数に取り、その数だけnilで初期化された配列を生成します。
arr1 = Array.new(3)
puts arr1.inspect
# 出力:[nil, nil, nil]
ブロックを与えることで、ブロックの評価結果を各要素に代入した配列を作成することもできます。
arr2 = Array.new(3) { 'a' }
puts arr2.inspect
# 出力:["a", "a", "a"]
続いてArray.newで異なる値を持つ配列を作成する方法です。
まず直接的に異なる値を持つ要素を生成することはできません。例えば、["a", "b", "c"]みたいな配列を作成しようと、Array.new(3) { 'a', 'b', 'C' }
のように書くと文法エラーになります。
arr3 = Array.new(3) { 'a', 'b', 'c' }
puts arr3.inspect
# 文法エラー:
# Main.rb:5: syntax error, unexpected ',', expecting '}'
# arr3 = Array.new(3) { 'a', 'b', 'c' }
# ^
# 以下略
しかし、下記のような書き方であれば、Array.newで異なる値を持つ配列を作成出来ます。
数値を2倍した値を持つ配列
最初の例は、数値を2倍にした値を持つ配列を作成する方法です。
p Array.new(3) { |i| i * 2 } # => [0, 2, 4]
このコードは、3つの要素を持つ新しい配列を作成し、それぞれの要素に0 * 2、1 * 2、2 * 2の計算結果を代入します。結果として[0, 2, 4]が得られます。
ランダムな数値を持つ配列
次の例では、1から10の間でランダムな数値を持つ配列を作成します。
p Array.new(3) { rand(1..10) } # => 例えば [3, 7, 1] など
各要素が1から10までの範囲でランダムに選ばれた数値になります。これにより、[3, 7, 1]のような配列が得られます
異なる文字列の配列
["a", "b", "c"]は例えば下記のようにすると作成出来ます。
p Array.new(3) { |i| (97 + i).chr } # => ["a", "b", "c"]
ASCIIコードで'a'が97なので、それにインデックスi(0から始まる)を足していき、.chrメソッドで対応する文字に変換します。