선택 필드에서 사용할 해시를 작성하는 루프가 있습니다. 의도는 해시로 끝나는 것입니다.
{ object.id => "object name", object.id => "object name" }
사용 :
@hash = {}
loop_over.each do |ac|
@hash[ac.name] = ac.id
end
나는이 map
방법이 이런 상황을위한 것이라고 생각 하지만 그것을 이해하고 어떻게 작동하는지에 대한 약간의 도움이 필요합니다. 가 map
이 리팩토링 할 수있는 권리 방법 each
루프는?
이와 같은 데이터 변환은 다음에 더 적합합니다 each_with_object
.
@hash = loop_over.each_with_object({}) { |ac, h| h[ac.name] = ac.id }
뇌가 사용하라고 map
말하지만 결과로 배열을 원하지 않는 경우 일반적으로 each_with_object
. 블록의 반환 값을 자체에 다시 공급하려면 원 inject
하지만 이와 같은 경우 에는 블록에서 inject
재미 있고 인공적인 것이 필요합니다 ;h
.
@hash = loop_over.inject({}) { |h, ac| h[ac.name] = ac.id; h }
# -------------------- yuck -----------------------------^^^
인공 반환 값의 존재는 each_with_object
대신 사용하려는 신호입니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다