Array

参考:

class Array (Ruby 2.6.0)

使い方

参考:

Ruby の Array (配列) の使い方 | TechRacho

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

Ruby で配列の条件を満たす要素を列挙する or 取り除く(select, reject, partition) | ぬいぐるみライフ?

map, select, collect, each の違いところ – Qiita

配列の作成

参考:

singleton method Array.new (Ruby 2.6.0)

instance method Array#* (Ruby 2.6.0)

結合

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

参考:

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

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

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

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

Ruby Array concat versus + speed? – Stack Overflow

抽出

参考:

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

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

重複を除外する

参考:

instance method Array#uniq (Ruby 2.6.0)

重複の抽出

参考:

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

Ruby で配列から重複したモノ (要素) を抜き出す (Uniq の逆) | それマグで!

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

concat

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

array.concat(other_array)

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

array.concat(*other_arrays)

参考:

instance method Array#concat (Ruby 2.6.0)

concat (Array) | Ruby リファレンス (ref.xaio.jp)

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

push

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

array.push("a", "b", "c")

参考:

instance method Array#append (Ruby 2.6.0)

push (Array) | Ruby リファレンス (ref.xaio.jp)

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

shift

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

array = [0, 1, 2, 3]
array.shift  # => 0
array        # => [1, 2, 3]

参考:

instance method Array#shift (Ruby 2.6.0)

shift (Array) | Ruby リファレンス (ref.xaio.jp)

unshift

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

array = ["end"]
array.unshift("a", "b", "c")
# => ["a", "b", "c", "end"]

参考:

instance method Array#prepend (Ruby 2.6.0)

unshift (Array) | Ruby リファレンス (ref.xaio.jp)

<<

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

array = []
array << 1 << 2 << 3
# => [1, 2, 3]

参考:

instance method Array#<< (Ruby 2.6.0)

<< (Array) | Ruby リファレンス (ref.xaio.jp)

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]

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               # => []

参考:

instance method Array#slice (Ruby 2.6.0)

instance method Array#slice! (Ruby 2.6.0)

[] / 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]

参考:

instance method Array#[] (Ruby 2.6.0)

each / each_index / reverse_each

参考:

instance method Array#each (Ruby 2.6.0)

instance method Array#each_index (Ruby 2.6.0)

instance method Array#reverse_each (Ruby 2.6.0)

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

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

参考:

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

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

instance method Enumerable#each_with_index (Ruby 2.6.0)

instance method Array#first (Ruby 2.6.0)

instance method Array#last (Ruby 2.6.0)

instance method Object#equal? (Ruby 2.6.0)

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

reverse / reverse!

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

参考:

instance method Array#reverse (Ruby 2.6.0)

break / next / redo

参考:

break next redo の違い – Qiita

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

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

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

index / find_index

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

["a", "b", "c"].index("c")  # => 2
["a", "b", "c"].index("z")  # => nil

参考:

instance method Array#find_index (Ruby 2.6.0)

index (Array) | Rubyリファレンス (ref.xaio.jp)

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!

参考:

instance method Enumerable#detect (Ruby 2.6.0)

find, detect (Enumerable) | Ruby リファレンス (ref.xaio.jp)

select / filter / find_all

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

array.select { |item| block }

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

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

参考:

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

instance method Enumerable#find_all (Ruby 2.6.0)

select (Array) | Ruby リファレンス (ref.xaio.jp)

select! / filter! / keep_if

参考:

instance method Array#filter! (Ruby 2.6.0)

instance method Array#keep_if (Ruby 2.6.0)

length / size

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

array.length

参考:

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

length, size (Array) – Rubyリファレンス

instance method Array#length (Ruby 2.6.0)

reject / reject!

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

array.reject { |item| block }

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

参考:

instance method Enumerable#reject (Ruby 2.6.0)

instance method Array#delete_if (Ruby 2.6.0)

reject (Array) | Ruby リファレンス (ref.xaio.jp)

delete

参考:

instance method Array#delete (Ruby 2.6.0)

compact / compact!

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

array.compact

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

array.compact!

参考:

instance method Array#compact (Ruby 2.6.0)

compact, compact! (Array) | Ruby リファレンス (ref.xaio.jp)

flatten / flatten!

参考:

instance method Array#flatten (Ruby 2.6.0)

map / collect

参考:

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

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

instance method Enumerable#collect (Ruby 2.6.0)

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!

参考:

instance method Array#collect! (Ruby 2.6.0)

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

reduce / inject / each_with_object

参考:

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

instance method Enumerable#inject (Ruby 2.6.0)

instance method Enumerable#each_with_object (Ruby 2.6.0)

join

参考:

instance method Array#join (Ruby 2.6.0)

sample

参考:

instance method Array#sample (Ruby 2.6.0)

drop

参考:

instance method Enumerable#drop (Ruby 2.6.0)

drop (Array) – Rubyリファレンス

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

include?

参考:

instance method Array#include? (Ruby 2.6.0)

include? (Array) | Ruby リファレンス (ref.xaio.jp)

配列を比較する

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

参考:

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

instance method Array#== (Ruby 2.6.0)

zip

参考:

instance method Array#zip (Ruby 2.6.0)

zip (Array) | Ruby リファレンス (ref.xaio.jp)

combination / permutation

combination:組み合わせを生成する

permutation:順列を生成する

repeated_combination:要素の重複を含めた組み合わせを生成する

 

参考:

Ruby での順列、組み合わせ。| siman のブログ

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

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

instance method Array#combination (Ruby 2.6.0)

instance method Array#permutation (Ruby 2.6.0)

instance method Array#repeated_combination (Ruby 2.6.0)

instance method Array#repeated_permutation (Ruby 2.6.0)

assoc / rassoc

参考:

instance method Array#assoc (Ruby 2.6.0)

instance method Array#rassoc (Ruby 2.6.0)

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)      # => true

参考:

singleton method Array.[] (Ruby 2.6.0)

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]

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

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

参考:

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

module function Kernel.#Array (Ruby 2.6.0)

wrap – Array | Ruby on Rails API [Official]

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!

参考:

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

Array#extract! to Active Support 6.0 |  Bogdan (bogdanvlviv.com)

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

タグ:

コメントを残す

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