随机选择N个最大值并在Ruby散列中返回键

时间:2012-01-08 17:51:46

标签: ruby random dictionary idioms

假设我有一个FruitDetector类,它接受一个字符串并返回具有不同概率的可能类型的水果作为哈希:

type = {
  banana: 0.2,
  lemon: 0.4,
  orange: 0.4
}

从哈希中的N个最大值中选择一个随机元素(在这种情况下,在柠檬和橙色之间随机选择),最简洁,最惯用的方法是什么,返回水果的名称?

2 个答案:

答案 0 :(得分:3)

最干净的方法是一步一步地做到这一点:

# determine maximum weight
maxw = type.values.max

# select items with maximum weight
selection = type.select{|item, weight| weight == maxw}

# choose random item from selection
p selection.keys.sample

答案 1 :(得分:1)

type.group_by{|k, v| v}.max.last.sample.first