Ruby の Array クラスのメソッドを眺めてみた

こんにちは kk8511 です。

インゲージ入社してから Ruby を実務で使いはじめて8ヶ月目となり、慣れてはきたけれど、まだまだ知らないことだらけの今日この頃、 基本は大事ということで Array クラスのメソッドをあらためて眺めてみて気になったメソッドの雑感などを記そうかと思います。

お時間のある方はお付き合いください。

docs.ruby-lang.org

気になったメソッド

[]

https://docs.ruby-lang.org/ja/latest/class/Array.html#I_--5B--5D

今更ですが範囲指定の仕様をちゃんと把握していなかった。

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

a[0..1]   #=> ["a", "b"]
a[0...1]  #=> ["a"]
a[0..-1]  #=> ["a", "b", "c", "d", "e"]
a[-2..-1] #=> ["d", "e"]
a[-2..4]  #=> ["d", "e"] 
a[0..10]  #=> ["a", "b", "c", "d", "e"]
a[10..11] #=> nil
a[2..1]   #=> []
a[-1..-2] #=> []
a[5..10]  #=> []

a[0, 1]    #=> ["a"]
a[-1, 1]   #=> ["e"]
a[0, 10]   #=> ["a", "b", "c", "d", "e"]
a[0, 0]    #=> []
a[0, -1]   #=> nil
a[10, 1]   #=> nil
a[5]       #=> nil
a[5, 1]    #=> []

assoc

https://docs.ruby-lang.org/ja/latest/class/Array.html#I_ASSOC

ary.find { |x| x == n } が短く書けるだけ?

ary = [[1,15], [2,25], [3,35]]
p ary.assoc(2)           # => [2, 25]
p ary.assoc(100)         # => nil
p ary.assoc(15)          # => nil

see also

combination

https://docs.ruby-lang.org/ja/latest/class/Array.html#I_COMBINATION

組み合わせをすべて生成してくれる便利なやつ。 標準ライブラリのインポートすらなく利用できる言語は珍しい気がする。

a = [1, 2, 3, 4]
a.combination(1).to_a  #=> [[1],[2],[3],[4]]
a.combination(2).to_a  #=> [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
a.combination(3).to_a  #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
a.combination(4).to_a  #=> [[1,2,3,4]]

see also

fill

https://docs.ruby-lang.org/ja/latest/class/Array.html#I_FILL

配列の初期化に使える。

[].fill('x', 0, 10) # ["x", "x", "x", "x", "x", "x", "x", "x", "x", "x"]

join

https://docs.ruby-lang.org/ja/latest/class/Array.html#I_JOIN

[1, 2, 3].join('-') #=> "1-2-3"

[1,2,3] * '-' でも同じことができるとは知らなかった。

デフォルトの出力フィールド区切り文字列 というのもはじめて知った。 https://docs.ruby-lang.org/ja/latest/method/Kernel/v/=2c.html

none?

https://docs.ruby-lang.org/ja/latest/class/Array.html#I_NONE--3F

このメソッドの存在を初めて知った。

%w{ant bear cat}.none? {|word| word.length == 5}  # => true
%w{ant bear cat}.none? {|word| word.length >= 4}  # => false
%w{ant bear cat}.none?(/d/)                       # => true
[].none?                                          # => true
[nil].none?                                       # => true
[nil,false].none?                                 # => true
[nil, false, true].none?                          # => false

see also

おわりに

とりとめのない内容でしたが最後までお付き合いいただきありがとうございました。