こんにちは kk8511 です。
インゲージ入社してから Ruby を実務で使いはじめて8ヶ月目となり、慣れてはきたけれど、まだまだ知らないことだらけの今日この頃、 基本は大事ということで Array クラスのメソッドをあらためて眺めてみて気になったメソッドの雑感などを記そうかと思います。
お時間のある方はお付き合いください。
気になったメソッド
[]
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
- https://docs.ruby-lang.org/ja/latest/method/Array/i/permutation.html
- https://docs.ruby-lang.org/ja/latest/method/Array/i/repeated_combination.html
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
おわりに
とりとめのない内容でしたが最後までお付き合いいただきありがとうございました。