概要
配列オブジェクトのメソッドのには破壊系と非破壊系があり、注意を要する。
パラメーター系
size/length
~要素数の取得
size
メソッド、length
メソッドとも配列の要素数を返すエイリアス。
1 2 3 4 5 6 |
a = [1, 2, 3] puts(a.size) # 3 puts(a.length) # 3 |
sum
~合計値の取得
sum
メソッドは配列要素の合計値を返す。
1 2 |
puts(a.sum) # 6 |
要素抽出系
first/last
~先頭要素/末尾要素の取得
first
メソッドは配列の先頭の要素、last
メソッドは末尾の要素を返す。
1 2 3 4 5 6 |
a = [1, 2, 3] p(a.first) # 1 p(a.last) # 3 |
sample~ランダムな要素取得
sample
メソッドは配列からランダムに1つ要素を返す。引数を指定すると重複なしでその個数分のサンプル配列を返すが、引数が要素数を超えた場合は全要素がランダムに並べられた配列が返される。
1 2 3 4 5 6 7 8 |
p(a.sample) # 1 p(a.sample(2)) # [3, 1] p(a.sample(5)) # [2, 1, 3] |
破壊的メソッド
push/unshift
~要素の追加
push
メソッドは配列の末尾に要素を追加し、unshift
メソッドは配列の先頭に要素を追加する。いずれも元の配列を変更する(要素の追加は<<
演算子でもできる)。
1 2 3 4 5 6 7 8 9 10 11 12 |
a = [1, 2, 3] a.push(4) # [1, 2, 3, 4] p(a) # [0, 1, 2, 3, 4] a.unshift(0) # 4 p(a) # [0, 1, 2, 3] |
pop/shift
~要素の取出し
pop
メソッドは配列の末尾から要素を取り出し、shift
メソッドは配列の先頭から要素を取り出す。いずれも元の配列が変更され、取り出された要素が戻り値となる。
1 2 3 4 5 6 7 8 9 10 11 |
p(a.pop) # 4 p(a) # [0, 1, 2, 3] p(a.shift) # 0 p(a) # [1, 2, 3] |
非破壊的メソッド
reverse
~要素の順番の反転
reverse
メソッドは、元の配列の要素の順番を反転した配列を新たに生成して返す。
1 2 3 4 5 6 |
a = [1, 2, 3, 4, 5] p(a.reverse) # [5, 4, 3, 2, 1] p(a) # [1, 2, 3, 4, 5] |
sort
~昇順ソート
sortメソッドは、元の配列を昇順でソートした配列を生成して返す。文字列オブジェクトの場合は辞書順で、大文字→小文字の順。
1 2 3 4 5 6 |
a = [3, 1, 5, 2, 4] p(a.sort) # [1, 2, 3, 4, 5] p(a) # [3, 1, 5, 2, 4] |
sort.reverse
~降順ソート
sort
メソッドとreverse
メソッドの組み合わせで、降順にソートされた配列が生成されて返される。
1 2 3 4 5 |
p(a.sort.reverse) # [5, 4, 3, 2, 1] p(a) #[3, 1, 5, 2, 4] |
uniq
~重複要素の削除
uniq
は配列中の重複した要素を削除して1つにし、重複のない配列とする。元の配列は変更されず、新たな配列が生成される。
1 2 3 4 5 6 |
a = [1, 2, 2, 3, 3, 3, 4, 4, 5] p(a.uniq) # [1, 2, 3, 4, 5] p(a) # [1, 2, 2, 3, 3, 3, 4, 4, 5] |
shuffle
~要素のシャッフル
shuffle
メソッドは、元の配列の要素をランダムに並べ替えた配列を生成して返す。
1 2 3 4 5 6 |
a = [1, 2, 3, 4, 5] p(a.shuffle) # [1, 5, 4, 2, 3] p(a) # [1, 2, 3, 4, 5] |
文字列化・配列化
split
~文字列の配列への分解
splitメソッドは、指定した文字列で元の文字列を区切って、それぞれが要素となる配列を生成する。
1 2 3 4 5 |
p("い,ろ,はに,ab,c".split(",")) # ["い", "ろ", "はに", "ab", "c"] p("a-b--c---d--e-f".split("--")) # ["a-b", "c", "-d", "e-f"] |
join
~配列要素の文字列への結合
joinメソッドは、配列の各要素を指定した文字列でつないだ文字列を生成する。
1 2 3 |
a = ["ABC", "KLM", "XYZ"] puts(a.join("および")) # ABCおよびKLMおよびXYZ |