menu
書いてる野郎
orebike@gmail.com
hoge = Array.new();
hoge = [1, 2, 3]
hoge = [1, 2, 3] p hoge.size #=> 3
ちなみに JavaScript のように長さをゼロに設定して配列要素を消すという操作はできない。
要素を含むかどうかを確認する。比較には ==
が使われる
hoge = [1, 2, 3] p hoge.include?(2) #=> true
<<
という演算子っぽいメソッドを使うと末尾に要素追加できる。直感的。
hoge = Array.new(); hoge << "aaa" hoge << "bbb" p hoge #=> ["aaa", "bbb"]
hoge = [1,2,3] piyo = [5,6,7] hoge.concat(piyo) p hoge #=> [1,2,3,4,5,6]
hoge = [1,2,3] piyo = [4,5,6] fuga = hoge + piyo p fuga #=> [1,2,3,4,5,6] p hoge #=> [1,2,3]
Rangeを使って指定できる。ゼロからスタート。
p [1,2,3,4][1..2] #=> [2,3]
つまりスタック構造の取り出し操作。LIFO: Last In First Out を実現する。要素がなくなったら nil を返す。
a = [1,2,3] p a.shift #=> 1 p a.shift #=> 2 p a #[3] p a.shift #=> 3 p a.shift #=> nil p a.shift #=> nil
先頭だけは特別に first というメソッドで取得できるようになっている
hoge = [1, 2, 3] hoge.first #=> 1
末尾だけは特別に last というメソッドで取得できるようになっている
hoge = [1, 2, 3] hoge.last #=> 3
hoge = [1, 2, 3] piyo = hoge.find do |a| a == 2 end p piyo #=>2
hoge = [1, 2, 3] piyo = hoge.find_all do |a| a >= 2 end p piyo #=>[2, 3]
find_all
は select
という別名も持っているので文脈によって使い分けるといいかも
非破壊的バージョン
a = [nil, nil, 123].compact p a #=> [123]
破壊的バージョン
a = [nil, nil, 123] a.compact! p a #=> [123]
非破壊的
hoge = [1, 2, 2, 3, 3, 2, 1] hoge = hoge.uniq p hoge #=> [1, 2, 3]
破壊的
hoge = [1, 2, 2, 3, 3, 2, 1] hoge.uniq!() p hoge #=> [1, 2, 3]
hoge = [1, 2, 3] hoge.delete(2) p hoge #=> [1, 3]
このメソッドでは破壊的に取り除かれる
delete_atメソッドの戻りは削除した値で、削除は破壊的に行われる。
hoge = [1, 2, 3] hoge.delete_at(1) p hoge #=> [1, 3]
位置を指定して削除の応用
hoge = [1, 2, 3] hoge.delete_at(-1) p hoge #=> [1, 2]
sort_byメソッドをうまく使うとできるっぽ
a = [[1,3],[1,2],[1,1],[2,3],[2,2],[2,1]] i = 0 a = a.sort_by do |b| [b[1], i += 1] end i = 0; a = a.sort_by do |b| [b[0], i += 1] end p a #=>[[1,1],[1,2],[1,3],[2,1],[2,2],[2,3]]
つまりシャッフルする
[1,2,3].sort_by{rand}
・・・らしい
RubyのArrayは便利なもんで順番がある箱ではなく値の集合として扱うことができる。
-演算子なのでベースは左辺になる。非破壊的
a = [1, 2, 3, 4] b = [2, 4] p a - b #=>[1, 3]
a = [1, 2, 3, 4] b = [2, 4] p a & b #=>[2, 4]
一言でこの機能を言うのは難しいけど、配列でループしてその中で処理した値を集めてまた配列にするという処理。全要素をあますことなく処理するときに使う。
a = [1,2,3,4,5].collect do |b| b * 10 end p a #=> [10,20,30,40,50]
要素数の増減を伴う処理をやりたいときは find_all
とか select
を使うといいかな