답변:
또한 조금 더 간단합니다 ....
>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]
map
) 경쟁 답변이 있음에도 불구하고 나는 이것을 많이 좋아하기 때문에 upvote 할 것입니다 !
Hash#values
더 간단 할뿐만 아니라 더 효율적입니다. 비교 time ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.values'
와time ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.map{|k,v| v}'
다음을 사용합니다.
hash.map { |key, value| value }
Hash#values
.
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]]
Enumerable#collect
블록을 취하고 열거 형의 모든 요소에서 블록을 한 번 실행 한 결과의 배열을 반환합니다. 따라서이 코드는 키를 무시하고 모든 값의 배열을 반환합니다.
Enumerable
모듈은 꽤 굉장합니다. 이를 잘 알면 많은 시간과 코드를 절약 할 수 있습니다.
hash.values
궁극적으로 여기 에서 정답임을 잊지 마십시오 .
hash.map(&:second)
:)
hash = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]
이것도 있습니다 :
hash = { foo: "bar", baz: "qux" }
hash.map(&:last) #=> ["bar", "qux"]
작동하는 이유 :
는 &
호출 to_proc
객체에 상기 방법으로 블록으로 전달한다.
something {|i| i.foo }
something(&:foo)
hash.values
더 나은 IMO). 하지만 블록을 제공Hash#each
하면 해시의 전체 값만 반환 된다는 점을 지적하고 싶었습니다 . 각 항목에 대해 작업을 수행하고 배열로 반환하려면Hash#collect
또는 해당 별칭을 사용하십시오Hash#map
. Enumerables에 대한 자세한 내용은 여기 .