在Ruby中使用max_by来查找散列中最大数字的键

时间:2017-08-22 20:21:52

标签: ruby-on-rails arrays ruby dictionary max

我需要在数组中找到包含"最大"的类别。重量。我在环境变量中定义权重:

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

我哪里误入歧途?

1 个答案:

答案 0 :(得分: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]