在 Ruby 中使用 max_by 查找哈希中最大数字的键

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.

我哪里误会了?

Dan*_*sky 5

您在散列中使用符号,但您正在尝试使用字符串访问它。将其更改为:

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)