2017-08-22 4 views
1

「最大の」重みを保持するカテゴリをカテゴリ内で見つける必要があります。私は環境変数に重みを定義します。Rubyでmax_byを使用して、ハッシュ内の最大数のキーを探します。

CATEGORY_WEIGHTS = { 
    "small_standard": 0, 
    "large_standard": 1, 
    "small_oversize": 2, 
    "medium_oversize": 3, 
    "large_oversize": 4 
} 

この例では、「最大」の重み付きカテゴリはlarge_oversizeだろう。

私はこのようなルックスをチェックしてる配列:

categories = [ 
    "small_oversize", 
    "large_standard", 
    "small_standard", 
    "large_oversize" 
] 

しかし、私はこれを行うとき、それは正しい値戻りません:それはsmall_oversize代わりのlarge_oversize返し

max_category = categories.max_by{ |cat| CATEGORY_WEIGHTS[cat] } 

を。

私はどこに迷いましたか?

+0

ハッシュ宣言 ' "X" で:X => y':y'は'になります。実際の文字列キーは '' x "=> y'です。 – tadman

答えて

4

ハッシュでシンボルを使用していますが、文字列でシンボルにアクセスしようとしています。あなたは単純にそれを行うことができる方法である

max_category = categories.max_by{|cat| CATEGORY_WEIGHTS[cat.to_sym]} 

そしてここに:に変更し

category_weights = { 
    small_standard: 0, 
    large_standard: 1, 
    small_oversize: 2, 
    medium_oversize: 3, 
    large_oversize: 4 
} 

category = category_weights.max_by{|c, w| w}[0] 
+0

うん、完璧。ありがとうございました!私はそれができるようになると私は答えを受け入れるよ! – ToddT

関連する問題