2017-08-22 33 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" 
] 

但是當我這樣做,它不會返回正確的值:

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

它返回small_oversize代替large_oversize

我在哪裏誤入歧途?

+0

在哈希聲明' 「X」:y'成爲':X => 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

相關問題