かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Ruby 配列の要素へのアクセス方法

オブジェクトへの参照を順に並べたもの。配列は個々のオブジェクトへの参照を保持している。該当する要素が存在しない添字の場合nilを返す

arg = [1, 2, 3]
p arg[3] # => nil

負の添字

負の添字は末尾から逆順に要素を指す番号と解釈される。-1が最後の要素、-2はその手前の要素を指す

arg = [1, 2, 3]
arg[-1] # => 3 arg[arg.length - 1] と同じ
arg[-2] # => 2 arg[arg.length - 2] と同じ
arg[-4] # => nil 範囲外の場合はnilを返す

長さ付き添字

位置と長さを指定する参照。新しい配列オブジェクトを生成して返す。
array[n, m] ... n番号からm個数の要素を指定
範囲外を指定すると空配列が返る、一部要素がある場合は要素があるところまでが返される。

arg = [1, 2, 3, 4]
arg[1, 2]  # => [2, 3]
arg[-2, 2] # => [3, 4]
# 範囲外を指定
arg[4, 2]  # => []
# 一部要素がある範囲を指定
arg[3, 2]  # => [4]
# -2番目から -1個の要素のような指定はできない
arg[-2, -1] # => nil

範囲添字

添字として範囲オブジェクトを渡すとその範囲に含まれる要素を取得できる。開始位置または終了位置に負の添字を用いることもできる。

arg = [1, 2, 3, 4]
arg[0..1]   # => [1, 2] 0番目から1番目までの要素
arg[0...1]  # => [1]    0番目から1番目未満までの要素
arg[-2..-1] # => [3, 4] -2番目から-1番目までの要素
arg[-2..3]  # => [3, 4] -2番目から3番目までの要素
arg[-2..1]  # => []     -2番目から1番目までの要素 ... 該当する要素無し
arg[4..5]   # => []     4番目から5番目までの要素  ... 該当する要素無し
arg[3..5]   # => [4]    3番目から5番目までの要素  ... 該当する要素のみ返す

配列の範囲外を指定してもエラーにならないし、範囲で取得すればある範囲だけ返してくれるのスゴイ!!

理解しきれてない課題

a = 1
b = "str"
p c = [a, b, 3, "文字列"] # => [1, "str", 3, "文字列"]
p d = [a, c, [1, 2, 3]]  # => [1, [1, "str", 3, "文字列"], [1, 2, 3]]

a += 1
b = "hoge"
p c # => [1, "str", 3, "文字列"]
p d # => [1, [1, "str", 3, "文字列"], [1, 2, 3]]
c[0] = 2
c[2] = "hoge"
p d # => [1, [2, "str", "hoge", "文字列"], [1, 2, 3]]

配列はオブジェクトへの参照を保持してるって事だったけど、a, bの値を変えても配列c, dには影響はないのに配列cの要素を変更すると、配列dの要素cが変更されるのは、abはオブジェクトではなく値の変数だからって認識で良いのですかね?


初めてのRuby

初めてのRuby