2016-10-28 2 views
0

해시 배열에서 reduce을 호출 할 때() 기법을 사용하여 매개 변수 내에서 키와 값으로 해시를 분할 할 수 있다고 생각했습니다. 그러나이 경우, 작동 표시되지 않습니다 해시 변수를 reduce로 나누기

columns = [ 
    {"lead"=>["source", 2]}, 
    {"parent"=>["name", 4]} 
] 

columns.reduce({}) do |acc, (k,v)| 
    puts "k #{k} v #{v}" 
end 

# k {"lead"=>["source", 2]} v 
# k {"parent"=>["name", 4]} v 
# => nil 

내가 ["source", 2]을 할 "lead"v을 할 k을 기대했다. 열은 배열이고 해시가 아니기 때문에 해시의 키/값 쌍을 가져 오려면이 작업을 수행 할 수 없습니다. (k,v) 블록에서 해부하지 않고 k/v 쌍을 전달하기 위해 인수 목록에서 사용할 수있는 또 다른 기술이 있습니까?

답변

1

이 괄호 뒤의 논리는 기본적으로 병렬 할당이므로 컬렉션의 각 항목이 해시이므로 사용자의 경우에는 작동하지 않습니다. 그래서 실질적으로 당신이 할 수있는 대신 배열에 각 항목을 변환 :

columns = columns.flat_map(&:to_a) 

Demonstration

관련 문제