2012-06-14 2 views
2

루비의 Hash::each_value{ |val| block }에 의해 반환 된 값의 순서가 어떻게 정의되어 있습니까? 나는. 주어진 해시에 대한 루프의 반복에서 값의 순서는 항상 동일합니다?Ruby의 해시에 대한 each_value의 순서가 정의되어 있습니까?

해시의 키 - 값 쌍이 배열의 값과 달리 정렬되지 않으므로 그렇게 될지 궁금합니다.

주어진 다음의 예 : 경우에

myhash = { :a => 100, :b => 200, :z => 9, :e => 101 } 
myhash.each_value { |val| 
    puts val 
} 

합니까 루비를 보장 항상 * 인쇄

100 
200 
9 
101 

보너스 문제가 정의 :
전제 조건은 무슨 순서가 정의되어 있습니까? 하드 코딩 된 해시 만 예제로 적용 할 수 있습니까?


는 [*] "항상" '작업 루비 1.9+ 각 실행에 및 시스템 "으로 판독 할 것이다.

+0

[왜 루비의 1000 해시 배열이 키와 값 쌍이 항상 특정 순서로 존재 하는가?] (http://stackoverflow.com/questions/3516125/why-rubys-array-of-1000)의 가능한 복제본 -hash-key-and-value-pairs-are-always-in-a-particular) –

답변

6

루비 1.8에서, 해시는 정렬되지 않으며 값은 임의의 반환됩니다 당신이 의지 할 수없는 순서. Ruby 1.9에서, 해시는 키가 삽입 된 시간에 기초하여 정렬됩니다 (첫 번째 삽입이 먼저 놓이는 등 ...).

각주 및 "항상"은 각 실행 및 작동중인 Ruby 1.9 이상이 설치된 시스템에서 읽어야한다고 지정했습니다. ".

당신이 키 또는 값 중 하나에 의해 해시를 통과하는 순서가 임의 보일 수 있으며, 다음 Ruby 1.8.7 Hash 문서에서

); "항상"의 정의에 의하면, 대답은 "예"입니다 일반적으로 게재 신청서에 포함되지 않습니다. Ruby 1.9.3 Hash 문서에서

는 :

해시 해당 키가 삽입 된 순서로 그 값을 열거.

+0

빠른 답변 주셔서 감사합니다.나는 내가 docu를 읽었지만 확실하게 충분히 신중하지는 않다는 것을 확신했다. –

3

루비 1.9에서는 순서가 삽입 순서입니다.

이 뉴스 때 3 년 전 ~의 일부 정보 :

+0

이러한 링크를 제공해 주셔서 감사합니다. –

+0

@Torbjoern 괜찮습니다. 벤이 의사 링크를 제공하는 것을 보았 기 때문에 API 문서가 아닌 다른 것에 갈 것이라고 생각했습니다. :) –

관련 문제