2013-01-23 4 views
1

DB의 행 배열에서 해시를 작성하려고합니다. 아래 코드로 쉽게 할 수 있습니다. 나는 PHP에서 Ruby를 찾았는데 이것이 어떻게 할 것인가. Ruby (또는 Rails)에서이 작업을 수행하는 더 좋고/적절한 방법이 있습니까?루비 해시를 만드는 더 좋은 방법은?

def features_hash 
    features_hash = {} 
    product_features.each do |feature| 
    features_hash[feature.feature_id] = feature.value 
    end 

    features_hash 
end 

# {1 => 'Blue', 2 => 'Medium', 3 => 'Metal'} 

답변

5

당신은 Hash[]를 사용할 수 있습니다

Hash[ product_features.map{|f| [f.feature_id, f.value]} ] 

당신겠습니까이 더 좋아?

product_features.map{|f| [f.feature_id, f.value]}.to_h # no available (yet?) 

그런 다음 가서 this feature request을 확인하고 의견을 보내주십시오!

대체 솔루션 :

product_features.each_with_object({}){|f, h| h[f.feature_id] = f.value} 

도 도움이 될 수 group_byindex_by 있습니다 만, 값이 자신이 아니라 자신의 value 기능을 할 것이다.

+0

Sweet! 고마워요! RubyMine은 구문을 좋아하지 않지만 잘 작동합니다! 그리고 그 방법은 편리하게 보입니다! –

1

코드는 좋은 방법입니다. 또 다른 방법은 다음과 같습니다

def features_hash 
    product_features.inject({}) do |features_hash, feature| 
    features_hash[feature.feature_id] = feature.value 
    features_hash 
    end 
end 
+0

아 맞아요! 그래도 나는이 방법을 좋아하지 않는다. .. –

3

이에 대한 index_by를 사용할 수 있습니다

product_features.index_by(&:id) 

이 키와 값으로 기록과 같은 id와 해시를 손-구성과 같은 결과를 얻을 수 있습니다.

+0

(나는이 솔루션이 가장 좋지만 무엇을 요구하지는 않습니다.) –

+0

'value'에 매핑하는 것과 관련하여 질문을 잘못 읽었습니다. 해시 형식으로 항목을 가져 오는 일반적인 일반적인 방법입니다. 내가 이것을 사용하여 단일 값을 추출하는 지름길을 생각해 낼 수 있는지 알게 될 것입니다. –

+0

나는이 방법이 정말 마음에 든다. 나는 실제로 그것을 그대로 사용할 수있다. 고마워! –

관련 문제