配列の要素に別のオブジェクトを代入する

配列オブジェクトでインデックスで指定した要素に対して現在格納されているオブジェクトとは別のオブジェクトを代入することができます。ここでは Ruby で指定した要素に新しいオブジェクトを代入する方法について解説します。

(2021 年 06 月 30 日公開 / 2022 年 10 月 12 日更新)

要素に別のオブジェクトを代入する

配列に含まれる要素に別のオブジェクトを代入するには次のように行います。

Arrayオブジェクト[index] = オブジェクト

インデックスで指定した要素に対して新しいオブジェクトを代入しています。

開始インデックスと終了インデックスの範囲にある要素に別のオブジェクトを代入する

指定した開始インデックスと終了インデックスまでの要素に対して別のオブジェクトを代入します。次の構文を使います。

Arrayオブジェクト[start..end] = オブジェクト

「start」に指定したインデックスから「end」に指定したインデックスまでの要素に対して別のオブジェクトを代入します。

ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]
ary[1..2] = ["osaka", "nagoya"]

上記の場合は対象の配列の 1 番目から 2 番目の要素を、 2 つの新しい要素を持つ配列で置き換えています。結果は次のようになります。

ary = ["東京", "osaka", "nagoya", "福岡", "札幌"]

次に置換対象の要素数と置換する要素の数が異なる場合です。

ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]
ary[1..2] = ["osaka", "nagoya", "yokohama"]

上記の場合は対象の配列の 1 番目から 2 番目の要素を、 3 つの新しい要素を持つ配列で置き換えています。結果は次のようになります。

ary = ["東京", "osaka", "nagoya", "yokohama", "福岡", "札幌"]

単独の値で置き換えることも可能です。その中でも置き換える値として nil を指定した場合にはその要素は削除されます。

ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]
ary[1..2] = nil

上記の場合は対象の配列の 1 番目から 2 番目の要素を nil で置き換えています。結果は次のようになります。

ary = ["東京", "福岡", "札幌"]

1 番目から 2 番目の要素が削除されました。

サンプルコード

次の例を試して下さい。

# encoding: UTF-8

ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]

puts("元の配列:")
ary.each do |youso|
  puts(youso)
end

ary[1..2] = ["osaka", "nagoya", "yokohama"]

puts("1番から2番を3つの要素で置き換え:")
ary.each do |youso|
  puts(youso)
end

ary[1..3] = nil

puts("1番から3番をnilで置き換え")
ary.each do |youso|
  puts(youso)
end

実行結果は次のようになります。

開始インデックスと終了インデックスの範囲にある要素に別のオブジェクトを代入する

開始インデックスと要素数で表される要素に別のオブジェクトを代入する

指定した開始インデックスと要素数を指定して新しい値に置き換えるには次の構文を使います。

Arrayオブジェクト[start, len] = 新しい要素

「start」に指定したインデックスから「len」要素数分の要素を新しい要素で置換します。

ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]
ary[1, 2] = ["osaka", "nagoya"]

上記の場合は対象の配列の 1 番目から 2 つの要素に 2 つの新しい要素を持つ配列を代入しています。結果は次のようになります。

ary = ["東京", "osaka", "nagoya", "福岡", "札幌"]

次に置換対象の要素数と置換する要素の数が異なる場合です。

ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]
ary[1, 2] = ["osaka", "nagoya", "yokohama"]

上記の場合は対象の配列の 1 番目から 2 つ分の要素を、 3 つの新しい要素を持つ配列で置き換えています。結果は次のようになります。

ary = ["東京", "osaka", "nagoya", "yokohama", "福岡", "札幌"]

単独の値で置き換えることも可能です。その中でも置き換える値として nil を指定した場合にはその要素は削除されます。

ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]
ary[1, 2] = nil

上記の場合は対象の配列の 1 番目から 2 つ分の要素を nil で置き換えています。結果は次のようになります。

ary = ["東京", "福岡", "札幌"]
サンプルコード

実際に試してみます。

# encoding: UTF-8

ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]

puts("元の配列:")
ary.each do |youso|
  puts(youso)
end

ary[1, 3] = ["横浜", "神戸"]

puts("1番から3つの要素を2つの要素で置き換え:")
ary.each do |youso|
  puts(youso)
end

実行結果は次のようになります。

複数の要素を新しい値で置き換え

-- --

Ruby で指定した要素に新しいオブジェクトを代入する方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。