Ruby_Array_37

この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。

class Array (Ruby 3.0.0 リファレンスマニュアル)

インスタンスメソッド

max -> object | nil
max(n) -> Array
  • 最大の要素、もしくは最大のn要素が降順に入った配列を返す
    • 全要素が互いに<=>メソッドで比較できることを仮定している
  • 引数を指定しない形式では要素が存在しなければnilを返す
  • 引数を指定する形式では要素が存在しなければ空の配列を返す
irb(main):001:0> [1, 3, 2].max
=> 3

irb(main):002:0> [1, 3, 2].max(2)
=> [3, 2]

irb(main):003:0> [1, 3, 2].max(5)
=> [3, 2, 1]
irb(main):001:0> [].max
=> nil

irb(main):002:0> [].max(1)
=> []
irb(main):001:0> [1, true, nil].max
Traceback (most recent call last):
        5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>'
        4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load'
        3: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>'
        2: from (irb):1:in `<main>'
        1: from (irb):1:in `max'
ArgumentError (comparison of Integer with true failed)
max {|a, b| ... } -> object | nil
max(n) {|a, b| ... } -> Array
  • ブロックの評価で各要素の大小判定を行い、最大の要素、もしくは最大の n 要素が降順に入った配列を返す
    • ブロックの値は、a > b のとき正、 a == b のとき 0、a < b のとき負の整数を、期待している
  • 引数を指定しない形式では要素が存在しなければnilを返す
  • 引数を指定する形式では要素が存在しなければ空の配列を返す
irb(main):001:0> arr = %w[ab foobar hoge]
=> ["ab", "foobar", "hoge"]

irb(main):002:0> arr.max {|a, b| a.size <=> b.size }
=> "foobar"

irb(main):003:0> arr.max(2) {|a, b| a.size <=> b.size }
=> ["foobar", "hoge"]

irb(main):004:0> arr.max(5) {|a, b| a.size <=> b.size }
=> ["foobar", "hoge", "ab"]
irb(main):005:0> 
irb(main):001:0> [].max {|a, b| a <=> b }
=> nil

irb(main):002:0> [].max(1) {|a, b| a <=> b }
=> []
irb(main):001:0> [1, true, nil].max {|a, b| a <=> b }
Traceback (most recent call last):
        5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>'
        4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load'
        3: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>'
        2: from (irb):1:in `<main>'
        1: from (irb):1:in `max'
ArgumentError (comparison of TrueClass with 1 failed)
min -> object | nil
min(n) -> Array
  • 最小の要素、もしくは最小のn要素が昇順で入った配列を返す
    • 全要素が互いに<=>メソッドで比較できることを仮定している
  • 引数を指定しない形式では要素が存在しなければnilを返す
  • 引数を指定する形式では要素が存在しなければ空の配列を返す
irb(main):001:0> [3, 1, 2].min
=> 1

irb(main):002:0> [3, 1, 2].min(2)
=> [1, 2]

irb(main):003:0> [3, 1, 2].min(5)
=> [1, 2, 3]
irb(main):001:0> [].min
=> nil

irb(main):002:0> [].min(1)
=> []
irb(main):001:0> [1, true, nil].min
Traceback (most recent call last):
        5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>'
        4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load'
        3: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>'
        2: from (irb):1:in `<main>'
        1: from (irb):1:in `min'
ArgumentError (comparison of Integer with true failed)
min {|a, b| ... } -> object | nil
min(n) {|a, b| ... } -> Array
  • ブロックの評価結果で各要素の大小判定を行い、最小の要素、もしくは最小のn要素が昇順で入った配列を返す
    • ブロックの値は、a > b のとき正、 a == b のとき 0、a < b のとき負の整数を、期待している
  • 引数を指定しない形式では要素が存在しなければnilを返す
  • 引数を指定する形式では要素が存在しなければ空の配列を返す
irb(main):001:0> arr = %w[foobar ab hoge]
=> ["foobar", "ab", "hoge"]

irb(main):002:0> arr.min {|a, b| a.size <=> b.size }
=> "ab"

irb(main):003:0> arr.min(2) {|a, b| a.size <=> b.size }
=> ["ab", "hoge"]

irb(main):004:0> arr.min(5) {|a, b| a.size <=> b.size }
=> ["ab", "hoge", "foobar"]
irb(main):001:0> [].min {|a, b| a <=> b }
=> nil

irb(main):002:0> [].min(1) {|a, b| a <=> b }
=> []
irb(main):001:0> [1, true, nil].min {|a, b| a <=> b }
Traceback (most recent call last):
        5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>'
        4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load'
        3: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>'
        2: from (irb):3:in `<main>'
        1: from (irb):3:in `min'
ArgumentError (comparison of TrueClass with 1 failed)