2012-10-04 2 views
1

나는 루비와 함께 초보자이며 작은 것을 시도하고 있었다. 이것이 내가 한 일입니다. 이것이 내가 => {"One"=>1, "Three"=>3, "Two"=>2}을 얻을 것입니다, 루비가 어떻게이 해시를 인쇄하는지 이해할 수 없다.

  1. 나는 IRB를 사용하고 내가 간단한 해시 sampleHash = {"One" => 1, "Two" => 2, "Three" => 3}을 만들었지 만 그것을 저장하는 경우 (당신이 리턴 키를 누른 후 그것은 당신을 보여줍니다). 나는 이런 식으로 그것을 밖으로 인쇄 할 때 또한 : sampleHash.each do|count, num| print "#{count}: #{num} \n" end I 출력으로이 얻을 : 이제

    One: 1 
    Three: 3 
    Two: 2 
    
  2. , 내가 편집기를 사용하여 그것을 시도, 이것은 내가 쓴 것입니다 :

    hashExample = {"One" => 1, 
           "Two" => 2, 
           "Three" => 3 } 
    hashExample.each do|count, num| 
        print "#{count}: #{num} \n" 
    end 
    

    나는이 얻을 출력과 같이

    Three: 3 
    Two: 2 
    One: 1 
    

은 어떻게 저장 않는 keysvalues ? 왜 다른 방식으로 인쇄합니까? 내가 여기서 무엇을 놓치고 있니?

답변

3

해시 (Ruby 1.9 이전)는 순서가 지정되지 않습니다. 즉, 해시에 키를 삽입하는 순서는 해시를 반복 할 때 나오는 순서와 아무 관련이 없습니다.

Ruby 1.9로 업그레이드하기에는 부족한 기본 제공 해시로이를 해결할 수있는 방법이 없습니다. 해당 키의 순서를 유지하는 해시가 필요하면 ActiveSupport::OrderedHash을 사용할 수 있습니다.

+0

예, 1.8 및 1.9에서 다르게 동작합니다. 차이점을 참조하십시오 (여기를 클릭하십시오 (http://cibox.org/slivu/stackoverflow?lang=ruby&file=hash.rb&versions=1.8.7-p370+1.9.3-p194) (결과를 보려면 실행을 클릭하십시오) –

관련 문제