私はこれを持っています:
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
そして、私はこれに到達したい:[["a","b","c"],["b","c"]]
これは動作するはずですが、動作しません:
hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
助言がありますか?
また、少しシンプルに....
>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]
私は使うだろう:
hash.map { |key, value| value }
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]]
Enumerable#collect
はブロックを受け取り、enumerableのすべての要素でブロックを1回実行した結果の配列を返します。したがって、このコードはキーを無視し、すべての値の配列を返します。
Enumerable
モジュールはとても素晴らしいです。それをよく知ることで、多くの時間と多くのコードを節約できます。
hash = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]
それは次のように簡単です
hash.values
#=> [["a", "b", "c"], ["b", "c"]]
これにより、ハッシュからの値が入力された新しい配列が返されます
新しい配列を保存したい場合は
array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]
array_of_values
#=> [["a", "b", "c"], ["b", "c"]]
これもあります:
hash = { foo: "bar", baz: "qux" }
hash.map(&:last) #=> ["bar", "qux"]
なぜ機能するのか:
&
はオブジェクトでto_proc
を呼び出し、ブロックとしてメソッドに渡します。
something {|i| i.foo }
something(&:foo)