Tod*_*ddT 1 ruby arrays dictionary ruby-on-rails max
我需要在数组中找到拥有“最大”权重的类别。我在环境变量中定义权重:
CATEGORY_WEIGHTS = {
"small_standard": 0,
"large_standard": 1,
"small_oversize": 2,
"medium_oversize": 3,
"large_oversize": 4
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,“最大”加权类别将为large_oversize
。
我正在检查的数组如下所示:
categories = [
"small_oversize",
"large_standard",
"small_standard",
"large_oversize"
]
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,它不会返回正确的值:
max_category = categories.max_by{ |cat| CATEGORY_WEIGHTS[cat] }
Run Code Online (Sandbox Code Playgroud)
它返回small_oversize
而不是large_oversize
.
我哪里误会了?
您在散列中使用符号,但您正在尝试使用字符串访问它。将其更改为:
max_category = categories.max_by{|cat| CATEGORY_WEIGHTS[cat.to_sym]}
Run Code Online (Sandbox Code Playgroud)
这是您可以更简单地完成的方法:
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]
Run Code Online (Sandbox Code Playgroud)