Ruby_Array_59

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

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

インスタンスメソッド

to_a -> Array
  • selfを返す
    • ただしArray のサブクラスのインスタンスに対して呼ばれたときは自身をArrayに変換したものを返す
irb(main):001:0> arr = []
=> []

irb(main):002:0> arr.to_a.class
=> Array
irb(main):001:0> class Foo < Array
irb(main):002:0> end
=> nil

irb(main):003:0> foo = Foo.new
=> []

irb(main):004:0> foo.to_a.class
=> Array
to_ary -> self
  • selfをそのまま返す
irb(main):001:0> arr = []
=> []

irb(main):002:0> arr.to_a.class
=> Array
irb(main):001:0> class Foo < Array
irb(main):002:0> end
=> nil

irb(main):003:0> foo = Foo.new
=> []

irb(main):004:0> foo.to_ary.class
=> Foo
to_h -> Hash
to_h { block } -> Hash
  • selfを[key, value]のペアの配列として解析し、結果をHashにして返す
    • [[k1, v1], [k2, v2], ...]の形式
  • ブロックを指定すると、配列の各要素でブロックを呼び出しその結果をペアとして利用する
irb(main):001:0> [['a', 1]].to_h
=> {"a"=>1}

irb(main):002:0> [['a', 1], ['b', 2]].to_h
=> {"a"=>1, "b"=>2}

irb(main):003:0> [['a', 1], ['b', 2], ['c', nil]].to_h
=> {"a"=>1, "b"=>2, "c"=>nil}
irb(main):002:0> ['a', 1].to_h
(irb):2:in `to_h': wrong element type String at 0 (expected array) (TypeError)
        from (irb):2: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>'

irb(main):001:0> [['a', 1], ['b']].to_h
(irb):1:in `to_h': wrong array length at 1 (expected 2, was 1) (ArgumentError)
        from (irb):1: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>'
irb(main):001:0> [['a', 1], ['b', 2]].to_h { |k, v| [k, v] }
=> {"a"=>1, "b"=>2}

irb(main):002:0> [['a', 1], ['b', 2]].to_h { |k, v| [k.upcase, v + 100] }
=> {"A"=>101, "B"=>102}

メモ

  • to_aryを今知った