Случайный выбор между N максимальными значениями и возвращаемым ключом в хэше Ruby - PullRequest
0 голосов
/ 08 января 2012

Предположим, у меня есть класс FruitDetector, который принимает строку и возвращает возможные типы фруктов с различными вероятностями в виде хэша:

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

Какой самый чистый идиоматичный способ выбрать один случайныйэлемент из N максимальных значений в хэше (в данном случае случайный выбор между лимоном и апельсином), возвращающий название фрукта?

Ответы [ 2 ]

3 голосов
/ 08 января 2012

Самый чистый способ сделать это шаг за шагом:

# 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 голос
/ 09 января 2012
type.group_by{|k, v| v}.max.last.sample.first
...