2012-10-05 3 views
2

배열에 해시를 삽입하려고합니다 (이 예는 How to make dynamic multi-dimensional array in ruby?). 무엇이 잘못 되었습니까? 특정 요소를 덮어 쓰려면 0 말,루비 : 해시를 배열에 삽입 하시겠습니까?

@array << test1 

을 또는 :

@array[0] = test1 

@array = Array.new 
test1 = {"key1" => "value1"} 
test2 = {"key2" => "value2"} 
test3 = {"key3" => "value3"}    
@array.push(0) 
@array[0] << test1 
# ERROR: can't convert Hash into Integer  
@array[0] << test2  
@array.push(1) 
@array[1] << test2 
@array[1] << test3 

답변

7

<<

그래서 그냥 할, 배열, push 같은에 추가

또는 실제로 2 차원 배열을 원하십니까? @array[0][0]["key1"] == "value1"? 이러한 맥락에서

@array[0] = [] 
@array[0] << test1 
@array[0] << test2  
@array[1] = [] 
@array[1] << test2 
@array[1] << test3 
+0

그는 그가 다차원 배열 – alex

+0

감사를 원한다고 말한다, 당신은 2 차원 배열에 대한 설명 코드가 – migu

+0

@Thomas을했다, 당신은 어떻게 대답 이후에는 "편집"표시가 없음을 했는가? – alex

0

@array[0] << test1 해시에 의해 0을 bitshift 시도이다 0 << { "key1" => "value1" }를 의미 : 당신이 그들에 추가하기 전에이 경우, 당신은 바로 이곳에 빈 배열을 삽입해야합니다. 루비는 해시를 정수로 변환 할 수 없으므로 오류 메시지가 표시됩니다.

2

Ruby 배열 객체에 여러 가지 방법으로 삽입 할 수 있습니다. 여기 몇 가지 방법이 있습니다.

1.9.3p194 :006 > array = [] 
=> [] 
1.9.3p194 :007 > array << "a" 
=> ["a"] 
1.9.3p194 :008 > array[1] = "b" 
=> "b" 
1.9.3p194 :009 > array.push("c") 
=> ["a", "b", "c"] 
1.9.3p194 :010 > array_2 = ["d"] 
=> ["d"] 
1.9.3p194 :011 > array = array + array_2 
=> ["a", "b", "c", "d"] 
1.9.3p194 :012 > array_3 = ["e"] 
=> ["e"] 
1.9.3p194 :013 > array.concat(array_3) 
=> ["a", "b", "c", "d", "e"] 
1.9.3p194 :014 > array.insert("f") 
=> ["a", "b", "c", "d", "e"] 
1.9.3p194 :015 > array.insert(-1,"f") 
=> ["a", "b", "c", "d", "e", "f"] 
+0

감사합니다. 다양한 방법이 있다는 것을 알았습니다. 위 예제에서 아무것도 삽입하기 전에'array = []'을 먼저 실행해야합니다. 그렇지 않으면 nil에 대해'undefined method << '를 반환합니다 : NilClass' – migu

+0

예. array = []은 array = Array.new와 같습니다. 일반적으로 배열 변수를 삽입하기 전에 선언합니다. –

관련 문제