Arrayで使えるメソッド ------------------------------------------------------------ # push n 配列の末尾に n を追加する(破壊的) a=[1,2,3] a.push(4,5) a => [1, 2, 3, 4, 5] ------------------------------------------------------------ # pop # pop(n) 配列から1つ取り除いて返す または nで指定した数だけ配列から取り除き、その要素を配列で返す 返り値と残った値を使って、配列を分割するのにも使える a = [1, 2, 3, 4, 5] a.pop(3) => [3, 4, 5] a => [1, 2] ------------------------------------------------------------ # shift 配列の先頭から要素を捨てて、配列を返す。 a=[1,2,3,4,5] a.shift(3) => [1, 2, 3] a => [4, 5] ------------------------------------------------------------ # unshift 配列の先頭に要素を追加する a=[1,2,3,4,5] a.unshift 6 => [6, 1, 2, 3, 4, 5] ------------------------------------------------------------ # drop(n) 先頭のn要素を捨てた配列を返す 配列は書き換えない a = [1,2,3,4,5] a.drop(2) #=> [3,4,5] ------------------------------------------------------------ # drop_while{|e| ....} 最初に偽になった要素までを捨てる (最初に偽になった要素以降を取り出す) a = [1,2,3,4,5] a.drop_while{|i|i%3!=0} => [3, 4, 5] see also take_while ------------------------------------------------------------ # each {|i| ... } 配列の要素に対し繰り返す ------------------------------------------------------------ # each_index {|i| ... } 配列のindexに対して繰り返す for(i=0; i<N; i++) a[i]... 的な使い方ができる。 a=[3,1,4,1,5,9] a.each_index.map{|i| "#{i}:#{a[i]},"} => ["0:3,", "1:1,", "2:4,", "3:1,", "4:5,", "5:9,"] メモ: a.map.with_index{|v,i| "#{i}:#{v},"} => ["0:3,", "1:1,", "2:4,", "3:1,", "4:5,", "5:9,"] ------------------------------------------------------------ # count(n) nに一致する要素の数を返す # count{|e| ... } ブロックが真になった要素の数を返す a = [3, 1, 4, 1, 5, 9] a.count{|i| i%3 == 0} => 2 ------------------------------------------------------------ # delete 配列から一致する要素を削除する a = [3, 1, 4, 1, 5, 9] a.delete(1) a => [3, 4, 5, 9] ------------------------------------------------------------ # delete_at(n) 位置 n の要素を削除する a=[3,1,4,1,5,9] a.delete_at(-1) a => [3, 1, 4, 1, 5] ------------------------------------------------------------ # delete_if{|i| ...} 条件に一致する要素を削除する ------------------------------------------------------------ # fill(val) すべての要素を val にする # fill(val, start, length) # fill(val, range) 指定した範囲を val にする a=[3,1,4,1,5,9] a.fill(-1, 3..nil) => [3, 1, 4, -1, -1, -1] ------------------------------------------------------------ # filter{i| ... } # select{|i|... } 各要素に対しブロックを評価し、真だった要素の配列を返す ------------------------------------------------------------ # index(n) # find_index(n) # index{|i| ... } # find_index{|i| ... } n に一致するまたは、ブロックが真を返す最初の位置を返す a=[3,1,4,1,5,9] a.index(1) => 1 a.index{|v|v>3} => 2 # rindex(n) # rindex{|i) ...} nに一致する最後の要素の位置を返す a=[3,1,4,1,5,9] a.rindex(1) => 3 ------------------------------------------------------------ # first 配列の先頭の要素を返す。 Lisp でいえば car (cdr は drop(1)) first(n) として複数要素を返すことができる ------------------------------------------------------------ # flatten 配列を平たん化する a="this is a pen".split.map(&:chars) => [["t", "h", "i", "s"], ["i", "s"], ["a"], ["p", "e", "n"]] a.flatten => ["t", "h", "i", "s", "i", "s", "a", "p", "e", "n"] ------------------------------------------------------------ # include?(n) 配列が要素nを含むとき true, そうでないとき false を返す ------------------------------------------------------------ # insert(n, *val) 位置n の直前に val を追加する a=[3,1,4,1,5,9] a.insert(2, 11,12,13) => [3, 1, 11, 12, 13, 4, 1, 5, 9] ------------------------------------------------------------ # last # last(n) 配列の最後の要素を返す ------------------------------------------------------------ # all? {|e| ... } すべての要素が真のとき、真を返す # any? {|e| ... } 1個以上の要素が真のとき、真を返す # one? {|e| ... } 1個の要素が真のとき、真を返す "XXXXOXXXX".chars.one?{|v|v=="O"} => true "XXXXOXXXO".chars.one?{|v|v=="O"} => false ------------------------------------------------------------ # permutation(n) 順列を返す a=[?a, ?b, ?c] => ["a", "b", "c"] a.permutation(2).to_a => [["a", "b"], ["a", "c"], ["b", "a"], ["b", "c"], ["c", "a"], ["c", "b"]] ------------------------------------------------------------ # combination(n) 組み合わせを返す a=[?a, ?b, ?c] => ["a", "b", "c"] a.combination(2).to_a => [["a", "b"], ["a", "c"], ["b", "c"]] ------------------------------------------------------------ # rotate 指定した位置(省略時は1)の要素が先頭になる配列を生成し返す。 a => [3, 1, 4, 1, 5, 9] a.rotate => [1, 4, 1, 5, 9, 3] a => [3, 1, 4, 1, 5, 9] a.rotate(-1) => [9, 3, 1, 4, 1, 5] ------------------------------------------------------------ # sample 配列からランダムに1つ(引数を指定すれば複数)選んで返す a=(1..6).to_a a.sample => 4 a.sample => 2 ------------------------------------------------------------ # slice(n) # slice(n, length) # slice(range) Array#[] と同じ。 配列から指定した範囲の部分配列を返す ------------------------------------------------------------ # sort ソートする。要素は <=> で比較する。 # sort_by 要素をそのまま <=> で比較するのではなくブロックの出力で比較する "pencil".chars.sort_by{|c|c.ord} => ["c", "e", "i", "l", "n", "p"] ------------------------------------------------------------ # sum # sum{|e| ... } "abc".chars.sum{|c|c.ord} => 294 97+98+99 => 294 ------------------------------------------------------------ # take(n) 配列の先頭n要素を返す n は省略できない。 n が2以上なら firstと同じ ------------------------------------------------------------ # take_while{|e| ... } 要素が偽になるまでの要素を配列で返す。 (先頭から数えて要素が真である範囲を返す) a=[1,2,3,4,5,6] a.take_while{|n|n<4} => [1, 2, 3] a.take_while{|n|n>3} => [] ------------------------------------------------------------ # to_h 配列をハッシュにする [[:foo, :bar], [1, 2]].to_h => {:foo=>:bar, 1=>2} > %w(uma shika inu neko).each_with_index.to_h => {"uma"=>0, "shika"=>1, "inu"=>2, "neko"=>3} ブロックを指定するとそのブロックが返した [key, value]でハッシュを作る %w(uma shika inu neko).to_h{|w| [w, w.size]} => {"uma"=>3, "shika"=>5, "inu"=>3, "neko"=>4} ------------------------------------------------------------ # zip > [1,2,3].zip(["a", "b", "c"]) => [[1, "a"], [2, "b"], [3, "c"]] w=%w(uma shika inu kaba) => ["uma", "shika", "inu", "kaba"] (0...w.size).zip(w) => [[0, "uma"], [1, "shika"], [2, "inu"], [3, "kaba"]] ------------------------------------------------------------ # join # * %w(uma shika inu kaba).join("//") => "uma//shika//inu//kaba" %w(uma shika inu kaba)*"//" => "uma//shika//inu//kaba" ------------------------------------------------------------ # | 和演算 [1, 1, 4, 2, 3] | [5, 4, 5] #=> [1, 4, 2, 3, 5] ------------------------------------------------------------ # & 積演算 [3,1,4,1,5,9] & [1,7,3,2,0,5.0,8] => [3, 1] ------------------------------------------------------------ # + 連結 [1,2,3] + [2,3,4,5] => [1, 2, 3, 2, 3, 4, 5] ------------------------------------------------------------ # - 減算。 減算される側の配列中の、減算する配列に含まれる要素はすべて削除される。 [1,2,3]-[2,3,4,5] => [1] [1,2,2,3,3]-[2,3,4,5] => [1]