2016-10-03 2 views

답변

0

당신은 *를 사용하여 배열을 곱할 수 있지만,이 일을 변경 같은 해시 객체에 대한 참조의 배열을 만들 것입니다, 그들 모두를 변경합니다.

def strct(i) 
    { "mwdata" => [].tap do |array| 
     i.times do 
     array << { .... } 
     end 
    end 
    } 
end 

또는 주입 : : 이해

def strct(i) 
    { "mwdata" => 1.upto(i).inject([]) do |array| 
     array << { .... } 
    end 
    } 
end 

def strct(i) 
    { "mwdata": [ {...} ] * i } 
end 

이 탭을 사용하는 것도 가능하다 (@mudasobwa로 의견에서 지적) 이 질문에 대한 이유는, 나는 종종 자신이 somethi를하고 있음을 발견했습니다. 같은 NG : jsonbuilder처럼 작동하고 해시 "템플릿"을 만들 수 있습니다 hash_builder.rb :

def strct(i) 
    result = { "foo" => [] } 
    i.times do 
    result["foo"] << "Something #{i}" 
    end 
    result 
end 

빠른 인터넷 검색은 저에게이했다.

+0

두 스 니펫 **은 서로 동등하지 않습니다 **. 전자는 유일한 해시를 생성하고, 'i'번은 참조하고, 후자는 다른 해시를 생성합니다. OP가 중첩 된 해시를 변경하려고한다면 이는 매우 중요한 차이입니다. – mudasobwa

+0

@mudasobwa 맞습니다. –

관련 문제