Array

ドキュメント:

class Array | Ruby リファレンスマニュアル [公式]

使い方

参考:

配列 (Array) の使い方 | TechRacho

select などの配列の抽出/検索を行うメソッドまとめ – Qiita

select / reject / partition – 配列の条件を満たす要素を列挙する/取り除く | ぬいぐるみライフ?

map / select / collect / each の違い – Qiita

配列を作成する

空の配列で初期化する。

empty = []Code language: Ruby (ruby)

ドキュメント:

Array.new | Ruby リファレンスマニュアル [公式]

Array#* | Ruby リファレンスマニュアル [公式]

結合

  • push
  • <<
  • concat
  • + / +=
  • reduce(:concat) / reduce([], :concat)
  • flatten / flatten!

参考:

複数の配列を1つの配列に結合するために色々やってみた – Qiita

配列をマージ/結合する – Qiita

Ruby で一番早い配列結合は | 動かざることバグの如し

Array#concat vs Array#+ · Issue #165 · JuanitoFatas/fast-ruby – GitHub

Array concat versus + speed? – Stack Overflow

抽出

参考:

select などの配列の抽出/検索を行うメソッドまとめ – Qiita

How do I extract specific elements from an array? – Stack Overflow

重複を除外する

ドキュメント:

Array#uniq | Ruby リファレンスマニュアル [公式]

重複の抽出

参考:

配列で重複する値のみを取り出す | EasyRamble

配列から重複した要素を抜き出す/uniq の逆 | それマグで!

配列内の重複する値を抽出する方法 | 久保清隆のブログ

集合演算

  • & 積集合
  • | 和集合
  • 除外

ドキュメント:

Array#& | Ruby リファレンスマニュアル [公式]

Array#| | Ruby リファレンスマニュアル [公式]

Array#- | Ruby リファレンスマニュアル [公式]

Array#union | Ruby リファレンスマニュアル [公式]

Array#difference | Ruby リファレンスマニュアル [公式]

参考:

Filter to exclude elements from array – Stack Overflow

concat

末尾に指定した配列を結合する。

array.concat(other_array)Code language: Ruby (ruby)

複数の配列を渡すこともできる。

array.concat(*other_arrays)Code language: Ruby (ruby)

ドキュメント:

Array#concat | Ruby リファレンスマニュアル [公式]

参考:

String#concat, Array#concat and String#prepend take multiple arguments in Ruby 2.4 | BigBinary Blog

Push array into array by just one level – Stack Overflow

How do you add an array to another array and not end up with a multi-dimensional result? – Stack Overflow

push

配列の末尾に要素を追加する。

array.push("a", "b", "c")Code language: Ruby (ruby)

ドキュメント:

Array#append | Ruby リファレンスマニュアル [公式]

参考:

Ruby の Array#<< は Array#push よりも速いか | Big Sky

Difference between Array#<< and Array#push – Stack Overflow

shift

先頭の要素を取り除いて返す。

array = [0, 1, 2, 3]
array.shift  # => 0
array        # => [1, 2, 3]Code language: Ruby (ruby)

ドキュメント:

Array#shift | Ruby リファレンスマニュアル [公式]

unshift

配列の先頭に要素を追加する。

array = ["end"]
array.unshift("a", "b", "c")
# => ["a", "b", "c", "end"]Code language: Ruby (ruby)

ドキュメント:

Array#prepend | Ruby リファレンスマニュアル [公式]

<<

左辺の配列の末尾に右辺のオブジェクトを要素として加える。配列自身を返すため、連続して追加できる。

array = []
array << 1 << 2 << 3
# => [1, 2, 3]Code language: Ruby (ruby)

ドキュメント:

Array#<< | Ruby リファレンスマニュアル [公式]

Difference between Array#<< and Array#push – Stack Overflow

slice / slice!

slice は指定された自身の要素/部分配列を返す。Array#[] のエイリアス。

array = [0, 1, 2, 3, 4, 5]

array.slice(2)     # => 2
array.slice(1, 3)  # => [1, 2, 3]
array.slice(2..4)  # => [2, 3, 4]Code language: Ruby (ruby)

slice! は指定した要素/部分配列を自身から取り除き、取り除いた要素を返す。取り除く要素がなければ nil を返す。

array = ["a", "b", "c", "d", "e"]

array.slice!(0)     # => "a"
array               # => ["b", "c", "d", "e"]
array.slice!(1, 2)  # => ["c", "d"]
array               # => ["b", "e"]
array.slice!(0..2)  # => ["b", "e"]
array               # => []Code language: Ruby (ruby)

ドキュメント:

Array#slice | Ruby リファレンスマニュアル [公式]

Array#slice! | Ruby リファレンスマニュアル [公式]

[] / at

self[nth] -> object | nil
at(nth) -> object | nil
self[range] -> Array | nil
self[start, length] -> Array | nil
範囲の指定
  • ドット2つは終端を含む
  • ドット3つは終端を含まない
[0, 1, 2][0..2]   # => [0, 1, 2]
[0, 1, 2][0...2]  # => [0, 1]Code language: Ruby (ruby)

ドキュメント:

Array#[] | Ruby リファレンスマニュアル [公式]

each / each_index / reverse_each

ドキュメント:

Array#each | Ruby リファレンスマニュアル [公式]

Array#each_index | Ruby リファレンスマニュアル [公式]

Array#reverse_each | Ruby リファレンスマニュアル [公式]

参考:

Change value of array element which is being referenced in a .each loop? – Stack Overflow

繰り返しで最初の要素/最後の要素を判別する

ドキュメント:

Enumerable#each_with_index | Ruby リファレンスマニュアル [公式]

Array#first | Ruby リファレンスマニュアル [公式]

Array#last | Ruby リファレンスマニュアル [公式]

Object#equal? | Ruby リファレンスマニュアル [公式]

参考:

配列の要素で最初と最後だけ特別な処理をする | なりちゅうのエンジニアブログ

ループの最初と最後のみ特別扱いする書き方 – Qiita

Tell the end of a .each loop in ruby – Stack Overflow

reverse / reverse!

reverse は要素を逆順に並べ替えた配列を生成する。reverse! は破壊的に逆順に並べ替える。

ドキュメント:

Array#reverse | Ruby リファレンスマニュアル [公式]

break / next / redo

参考:

break / next / redo の違い | Worth Living

next / break でよく分かってなかったこと | dunno logs

多重ループを抜ける方法 | 或るプログラマの開発日記

配列を指定回数だけループ/each で処理する | イソップブログ

index / find_index

配列から引数と同じ要素を探し、その位置を 0 から始まる整数で返す。要素が見つからない場合は nil を返す。

["a", "b", "c"].index("c")  # => 2
["a", "b", "c"].index("z")  # => nilCode language: Ruby (ruby)

ドキュメント:

Array#find_index | Ruby リファレンスマニュアル [公式]

find / detect

要素に対して順にブロックを評価し、最初に真になった要素を返す。全ての要素について偽であった場合に、proc が与えられていれば call し、proc が与えられていなければ nil を返す。

[1, 2, 3, 4, 5].find { |v| v % 5 == 0 }  # => 5
[1, 2, 3, 4, 5].find { |v| v % 6 == 0 }  # => nil

[1, 2, 3, 4, 5].find(proc { "EEE" }) { |v| v % 6 == 0 }
# => "EEE"

["a", "b", "c"].find(proc { raise "Bye!" }) { |s| s == "z" }
# => RuntimeError: Bye!Code language: Ruby (ruby)

ドキュメント:

Enumerable#detect | Ruby リファレンスマニュアル [公式]

select / filter / find_all

条件に合う要素を探して集める。

array.select { |item| block }

ブロック引数に要素を入れながらブロックを繰り返し、ブロックの戻り値が真になった要素を集めて新しい配列にして返す。

ブロックを省略した場合は Enumerator オブジェクトを返す。

ドキュメント:

Array#filter | Ruby リファレンスマニュアル [公式]

Array#filter! | Ruby リファレンスマニュアル [公式]

Enumerable#filter | Ruby リファレンスマニュアル [公式]

参考:

select などの配列の抽出/検索を行うメソッドまとめ – Qiita

select! / filter! / keep_if

ドキュメント:

Array#filter! | Ruby リファレンスマニュアル [公式]

Array#keep_if | Ruby リファレンスマニュアル [公式]

length / size

配列の長さを返す。配列が空のときは 0 を返す。

array.length

ドキュメント:

Array#length | Ruby リファレンスマニュアル [公式]

参考:

count / length / size メソッドの違いと特徴を比較 – Qiita

reject / reject!

ブロックの戻り値が真である要素を取り除く。

array.reject { |item| block }

要素の数だけブロックを繰り返し実行し、ブロックの戻り値が真になった要素を取り除いた新しい配列を作成して返す。ブロック引数には各要素が入る。

ドキュメント:

Enumerable#reject | Ruby リファレンスマニュアル [公式]

Array#delete_if | Ruby リファレンスマニュアル [公式]

delete

ドキュメント:

Array#delete | Ruby リファレンスマニュアル [公式]

compact / compact!

配列から nil の要素を取り除いた新しい配列を返す。

array.compactCode language: Ruby (ruby)

compact! メソッドは、配列から nil である要素を取り除く。レシーバ自身を変更するメソッド。戻り値は、nil を削除したときはレシーバ自身、変更がなかったときは nil となる。

array.compact!Code language: Ruby (ruby)

ドキュメント:

Array#compact | Ruby リファレンスマニュアル [公式]

flatten / flatten!

ドキュメント:

Array#flatten | Ruby リファレンスマニュアル [公式]

map / collect

ドキュメント:

Enumerable#collect | Ruby リファレンスマニュアル [公式]

参考:

map の途中で next を使用すると nil が入ってしまう罠 – Qiita

map で条件分岐をした時に nil が返ってきてしまう時の対処法 | 地方でリモートワーク

Change value of array element which is being referenced in a .each loop? – Stack Overflow

How do I break out of a map/collect and return whatever has been collected up to that point? – Stack Overflow

map! / collect!

ドキュメント:

Array#collect! | Ruby リファレンスマニュアル [公式]

参考:

Change value of array element which is being referenced in a .each loop? – Stack Overflow

reduce / inject / each_with_object

ドキュメント:

Enumerable#inject | Ruby リファレンスマニュアル [公式]

Enumerable#each_with_object | Ruby リファレンスマニュアル [公式]

参考:

inject と each_with_object をうまく使い分ける 翻訳 | TechRacho

join

ドキュメント:

Array#join | Ruby リファレンスマニュアル [公式]

sample

ドキュメント:

Array#sample | Ruby リファレンスマニュアル [公式]

drop

ドキュメント:

Enumerable#drop | Ruby リファレンスマニュアル [公式]

参考:

某「Ruby で cdr っぽい事したい? drop 使えば良いんじゃないですか? (鼻ホジ」ぼく「……あっ」| Bye Bye Moore

include?

ドキュメント:

Array#include? | Ruby リファレンスマニュアル [公式]

配列を比較する

全ての要素を == で比較して true であれば true を返す。それ以外の場合は false を返す。

ドキュメント:

Array#== | Ruby リファレンスマニュアル [公式]

参考:

Array と Hash は == で中身の比較を行う | ぺけみさお

zip

ドキュメント:

Array#zip | Ruby リファレンスマニュアル [公式]

combination / permutation

  • combination 組み合わせを生成する
  • permutation 順列を生成する
  • repeated_combination 要素の重複を含めた組み合わせを生成する
  • repeated_permutation 要素の重複を含めた順列を生成する

ドキュメント:

Array#combination | Ruby リファレンスマニュアル [公式]

Array#permutation | Ruby リファレンスマニュアル [公式]

Array#repeated_combination | Ruby リファレンスマニュアル [公式]

Array#repeated_permutation | Ruby リファレンスマニュアル [公式]

参考:

順列/組み合わせ | siman のブログ

順列 (permutation) を作成する | まくまくノート

Array の組み合わせ系メソッドまとめ – Qiita

assoc / rassoc

ドキュメント:

Array#assoc | Ruby リファレンスマニュアル [公式]

Array#rassoc | Ruby リファレンスマニュアル [公式]

参考:

reverse lookup of array list of values – Stack Overflow

Array.[]

要素を与えて Array から派生したクラスのインスタンスを生成する。

class ArrayLike < Array; end

array = ArrayLike[1, 2, 3]

array.is_a?(ArrayLike)  # => true
array.is_a?(Array)      # => trueCode language: Ruby (ruby)

ドキュメント:

Array.[] | Ruby リファレンスマニュアル [公式]

break

参考:

How to break out from a ruby block? – Stack Overflow

集計する

参考:

重複するキーを指定して他の値を計算する方法 – Qiita

Kernel.#Array / Array.wrap

配列であればそのまま返し、配列でない場合には値を要素にした配列を生成して返す。

Array(123)        # => [123]
Array("Hello")    # => ["Hello"]
Array(nil)        # => []
Array([1, 2, 3])  # => [1, 2, 3]
Array({ a: "hoge", b: "fuga" })
                  # => [[:a, "hoge"], [:b, "fuga"]]
Array(1..5)       # => [1, 2, 3, 4, 5]Code language: Ruby (ruby)

Array.wrap はハッシュやレンジを与えた場合にそのまま配列で包む。

Array.wrap({ a: "hoge", b: "fuga" })
                  # => [{ a: "hoge", b: "fuga" }]
Array.wrap(1..5)  # => [1..5]Code language: Ruby (ruby)

ドキュメント:

Kernel.#Array | Ruby リファレンスマニュアル [公式]

wrap – Array | Ruby on Rails API [Official]

参考:

Ruby の便利メソッド Kernel#Array | hotoolong’s blog

elegantly convert variable to an array if not an array already – Stack Overflow

Convert Ruby hash into array without calling `Hash#to_a` – Stack Overflow

ActiveSupport 拡張

参考:

Array の拡張 | Rails 日本語ドキュメント (Ruby STUDIO)

ちょっと便利な ActiveSupport の標準クラス拡張 Array & Hash 編 | おどるダメ人間

extract!

ドキュメント:

extract! – Array | Ruby on Rails API [Official]

excluding – Array | Ruby on Rails API [Official]

参考:

Rails 6 のちょい足しな新機能を試す Array#extract! 編 – Qiita

Array#extract! to Active Support 6.0 | Bogdan

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA