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)
["まぐろ", "いくら", "かに"]
うまく取り出すことができている。
参考
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る