Ruby_Array_61
この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.1 リファレンスマニュアル)
インスタンスメソッド
uniq -> Array
uniq! -> self | nil
uniq {|item| ... } -> Array
uniq! {|item| ... } -> self | nil
- uniqは配列から重複した要素を取り除いた新しい配列を返す
- uniq!は削除を破壊的に行い、削除が行われた場合はselfを、そうでなければnilを返す
- この挙動は覚えておきたい
- 要素の重複判定はObject#eql?によって行われる
- ブロックが与えられた場合、ブロックが返した値が重複した要素を取り除いた配列を返す
- 要素を先頭から巡っていき、最初に出現したものが残る
irb(main):001:0> arr = [1, 2, 1] => [1, 2, 1] irb(main):002:0> brr = arr.uniq => [1, 2] irb(main):003:0> arr => [1, 2, 1] irb(main):004:0> brr => [1, 2]
irb(main):001:0> arr = [1, 2, 1] => [1, 2, 1] irb(main):002:0> brr = arr.uniq! => [1, 2] irb(main):003:0> arr => [1, 2] irb(main):004:0> brr => [1, 2]
irb(main):001:0> [1, 2, 3].uniq => [1, 2, 3] irb(main):002:0> [1, 2, 3].uniq! => nil
irb(main):001:0> [1, 1.0, '1'].uniq => [1, 1.0, "1"] irb(main):002:0> [1, 1.0, '1'].uniq { |v| v.to_i } => [1]
irb(main):001:0> v1 = 'e' => "e" irb(main):002:0> v2 = 'e' => "e" irb(main):003:0> arr = [v1, v2] => ["e", "e"] irb(main):004:0> brr = arr.uniq => ["e"] irb(main):005:0> v2.capitalize! => "E" irb(main):006:0> brr => ["e"] irb(main):007:0> v1.capitalize! => "E" irb(main):008:0> brr => ["E"] # memo # 覚えておきたい
values_at(*selectors) -> Array
- 引数で指定されたインデックスに対応する要素を配列で返す
- インデックスに対応する値がなければnilが要素になる
- インデックスは整数もしくは整数のRangeで指定する
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.values_at(0, 2, 4) => ["a", "c", "e"] irb(main):003:0> arr.values_at(0, 4, 2) => ["a", "e", "c"] irb(main):004:0> arr.values_at(0, 0, 0) => ["a", "a", "a"] irb(main):005:0> arr.values_at(0, 4, 10) => ["a", "e", nil] irb(main):006:0> arr.values_at(-4, -1, -100) => ["b", "e", nil] irb(main):007:0> arr.values_at(0..2) => ["a", "b", "c"] irb(main):008:0> arr.values_at(0..10) => ["a", "b", "c", "d", "e", nil, nil, nil, nil, nil, nil] irb(main):009:0> arr.values_at(5..6) => [nil, nil] irb(main):010:0> arr.values_at(6..7) => [nil, nil] irb(main):011:0> arr.values_at(0, 1..4, 2) => ["a", "b", "c", "d", "e", "c"] # memo # 引数を前から順に処理している感じ
irb(main):001:0> arr = %w[a b c d e] => ["a", "b", "c", "d", "e"] irb(main):002:0> arr.values_at(1.0) => ["b"] irb(main):003:0> arr.values_at(1.8) => ["b"] irb(main):004:0> arr.values_at('1.0') (irb):4:in `values_at': no implicit conversion of String into Integer (TypeError) from (irb):4:in `<main>' from /Users/mfham/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `load' from /Users/mfham/.rbenv/versions/3.1.0/bin/irb:25:in `<main>'