ざっくりん雑記

プログラミングで忘れそうなことをひたすらメモる

Ruby - 配列におけるインデックス

要素の取り出し方いろいろ

要素を取り出す方法は、さまざまある。

  • array[n]
  • array[n..m] , array[n...m]
  • array[n, length]

簡単な例として以下に示す。

season = ['はる', 'なつ', 'あき', 'ふゆ']

p season[0] # はる
p season[0..3] # はる なつ あき ふゆ (配列)
p season[0, 2] # はる なつ (配列)
"はる"
["はる", "なつ", "あき", "ふゆ"]
["はる", "なつ"]

または、これらをメソッドに置き換えても書ける

  • array.at(n)
  • array.slice(n)
  • array.slice(n..m)
  • array.slice(n, length)
p season.at(0) # はる
p season.slice(3) # ふゆ
p season.slice(0, 2) # はる なつ (配列)
"はる"
"ふゆ"
["はる", "なつ"]

あまりメソッドで取り出す方法というのは行わないっぽい。

要素を置き換える

一つの要素を置き換える

まず、一つの要素のみを置き換えたい場合はかんたんにarray[index] = valueというかたちで代入する感じで置き換えることができる。

direction = ['', '西', '', '']

direction[0] = 'east'
direction[3] = 'north'

p direction
["east", "西", "南", "north"]

複数要素を置き換える

直感的に、複数要素を置き換えることができる。

direction[1..2] = ['west', 'south']
p direction
["東", "west", "south", "北"]

要素を挿入する

今ある要素に変更を加えず、配列に新たな要素を追加したい場合に、挿入操作を行う。

あまり直感的ではないかもしれないが、挿入の考え方として、0個の要素と置き換えるとみなして、コードを書く。つまり[n, 0]とするとインデックスがnの要素の前に挿入される。

一つの要素を挿入する

direction = ['', '西', '', '']
direction[1, 0] = ['東と西のまんなか']
p direction
["東", "東と西のまんなか", "西", "南", "北"]

複数要素を挿入する

こちらも、似たような感じで行えばよくて、挿入する配列の要素を増やせば増やした分だけ挿入される感じ。

direction = ['', '西', '', '']
direction[1, 0] = ['東西 その1', '東西 その2']
p direction
["東", "東西 その1", "東西 その2", "西", "南", "北"]

とびとびの要素をかいつまんで、配列にする

冒頭で書いた要素の取り出し方は、連続した要素番号だけ対応できた。しかし、複数のインデックスを指定して、それを一つの配列にする、といったことはできなかった。

そういったことをしたい場合はarray.value_at(n1, n2, ...)メソッドを利用する。

sushi = %w(まぐろ サーモン いくら うに かに えんがわ)
p sushi.values_at(0,2,4)
["まぐろ", "いくら", "かに"]

うまく取り出すことができている。

参考

たのしいRuby 第5版

たのしいRuby 第5版