2010-03-01 4 views
0

해시에 목록을 삽입하려고합니다. 그러나 해시 [키]. 크기가 잘못된 결과를 제공합니다.배열의 해시가 잘못된 크기 결과를 제공합니다 - Ruby

p = Hash.new 
p = {"a" => ["b","e"]} 
puts p["a"].size #prints 2 ----This is the Problem 
p["a"] << ["d", "f"] 
puts p["a"].size #prints 3 
puts p["a"][1] #prints e 
puts p["a"][2] #prints df 

어떻게 목록을 추가하면 크기가 1 씩 증가합니까 (올바른지). 해시를 올바르게 초기화하는 방법이 있습니까?

+0

방법 3 호선 2의 크기가 잘못? p [ "a"]는 2 개의 원소로 이루어진 배열입니다. 너는 무엇이 그 크기를 원 하겠니? 그리고 왜? – Pete

+0

'{ "a"=> [[ "b", "e"], [ "d", "f"]]}와 같은 크기를 2로 지정합니다. – BSingh

답변

5

을 편집하여 추가했습니다. 귀하의 의견은 요소 'a'가 배열의 배열이되도록 지정합니다. 여기있다 : 문제를 진단 할 때

h = Hash.new 
h = {"a" => [["b","e"]]} 
p h       # => {"a"=>[["b", "e"]]} 
h["a"] << ["d", "f"] 
p h       # => {"a"=>[["b", "e"], ["d", "f"]]} 

, putsp을 선호합니다. puts은 중요한 세부 정보를 숨길 수 있습니다. p에 몇 가지 통화를 추가하고 알아 낸 내용을 살펴 보겠습니다. 아, 해시 이름을 "p"에서 "h"로 바꿀 것입니다. 그렇지 않으면 주위에 너무 많은 "p"가 있습니다.

h = Hash.new 

위의 내용은 필요하지 않습니다. 다음 줄은 "h"에 배열을 할당하고이 할당을 덮어 씁니다.

h = {"a" => ["b","e"]} 
p h # => {"a"=>["b", "e"]} 
p h["a"].size # 2 

모두는, 심지어 시간 [ "A"]. 크기는 2 이유를 반환해야 정확히 무엇입니까?

p h["a"] # => ["b", "e"] 

h [ "a"]는 두 개의 요소가있는 배열입니다.

h["a"] << ["d", "f"] 
p h # => {"a"=>["b", "e", ["d", "f"]]} 

어떤 현상이 발생 했습니까? <<은 배열 끝에 하나의 요소를 추가하고 그 단일 요소는 배열 [ "d", "f"]입니다. 그리고 그 이유 : 스트링 "B"및 "E"와 어레이 [ "D", "F"] 배열의 세 가지 요소가 실제로 존재

p h["a"].size # => 3 

때문에.

당신이 배열의 요소 "D"와 "F"를 추가하는 것을 의미하는 경우

다음 += 함께 할 :

h = {"a" => ["b","e"]} 
h["a"] += ["d", "f"] 
p h # => {"a"=>["b", "e", "d", "f"]} 
+0

답장을 보내 주신 Wayne에게 감사드립니다. 개별 요소가 아닌 배열로 [ "b", "e"]를 어떻게 삽입 할 수 있습니까? '{ "a"=> [[ "b", "e"], [ "d", "f"]]} ' – BSingh

+2

@BSingh 그런데 왜'h = "a"=> [[ "b", "e"]]}'및'h [ "a"] << [ "d", "f"]'? – MBO

+0

@BSingh, 나는 대답의 맨 위에 MBO의 제안을 추가했습니다. –

관련 문제