Array
ドキュメント:
class Array | Ruby リファレンスマニュアル [公式]
使い方
参考:
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
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 リファレンスマニュアル [公式]
重複の抽出
参考:
配列から重複した要素を抜き出す/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
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 リファレンスマニュアル [公式]
参考:
配列の要素で最初と最後だけ特別な処理をする | なりちゅうのエンジニアブログ
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") # => nil
Code 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.compact
Code 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
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 リファレンスマニュアル [公式]
参考:
順列 (permutation) を作成する | まくまくノート
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) # => true
Code language: Ruby (ruby)
ドキュメント:
Array.[] | Ruby リファレンスマニュアル [公式]
break
参考:
How to break out from a ruby block? – Stack Overflow
集計する
参考:
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]
参考: