값 배열에 대한 Ruby 해시


118

나는 이것을 가지고있다:

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.values더 나은 IMO). 하지만 블록을 제공 Hash#each하면 해시의 전체 값만 반환 된다는 점을 지적하고 싶었습니다 . 각 항목에 대해 작업을 수행하고 배열로 반환하려면 Hash#collect또는 해당 별칭을 사용하십시오 Hash#map. Enumerables에 대한 자세한 내용은 여기 .
brymck 2012 년

3
이 질문은 이상하게도 익숙해 보입니다. 지금 같은 숙제를하는 사람이 몇 명인지 궁금합니다.
피터 브라운

답변:


261

또한 조금 더 간단합니다 ....

>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]

여기 루비 문서


3
+! 맵시 있는! (사용 map) 경쟁 답변이 있음에도 불구하고 나는 이것을 많이 좋아하기 때문에 upvote 할 것입니다 !
Michael Durrant 2012 년

2
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}'
jordanbtucker

+1 (당신의 코드를 시도한 후 놀랍게도 눈부신) 하루를 여러 방법으로 색인을 제거하는 데 운이 없었습니다 ... 모두 감사합니다! : D
로마서 8.38-39

2
키가 발생하는 정확한 순서로 인쇄됩니까?
stack1

43

다음을 사용합니다.

hash.map { |key, value| value }

3
나는 그것을 반대 투표하지 않았지만 더 복잡합니다 Hash#values.
마크 토마스

1
예, Ray의 답변도 찬성했습니다. 저도 마음에 들면 경쟁적인 답변에 찬성 투표하게되어 기쁩니다.
마이클 듀런트

3
여기서 경쟁이 아니라 서로 돕고 있다고 생각합니다. :)
witkacy26

키를 값으로 사용하여 해시에서 배열을 만들려고 할 때 정확히 내가 찾던 것입니다. 감사합니다 :)
파비안 Leutgeb

동시에 키로 일부 논리를 수행해야 할 때 유용합니다 .
Chris Cirefice 16.08.14

23
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]] 

Enumerable#collect블록을 취하고 열거 형의 모든 요소에서 블록을 한 번 실행 한 결과의 배열을 반환합니다. 따라서이 코드는 키를 무시하고 모든 값의 배열을 반환합니다.

Enumerable모듈은 꽤 굉장합니다. 이를 잘 알면 많은 시간과 코드를 절약 할 수 있습니다.


2
@Ray Toal의 답변과 마찬가지로 hash.values궁극적으로 여기 에서 정답임을 잊지 마십시오 .
tadman 2012 년

또는 hash.map(&:second):)
야프 Haagmans


4

간단합니다.

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"]]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.