В Ruby у меня есть хэш объектов.Каждый объект имеет тип и значение.Я пытаюсь разработать эффективную функцию, которая может получить среднее значение всех объектов определенного типа в хэше.
Вот пример того, как это в настоящее время реализовано:
#the hash is composed of a number of objects of class Robot (example name)
class Robot
attr_accessor :type, :value
def initialize(type, value)
@type = type
@value = value
end
end
#this is the hash that inclues the Robot objects
hsh = { 56 => Robot.new(:x, 5), 21 => Robot.new(:x, 25), 45 => Robot.new(:x, 35), 31 => Robot.new(:y, 15), 0 => Robot.new(:y, 5) }
#this is the part where I find the average
total = 0
count = 0
hsh.each_value { |r|
if r.type == :x #is there a better way to get only objects of type :x ?
total += r.value
count += 1
end
}
average = total / count
Итак, мой вопрос:
Есть ли лучший способ сделать это, не включающий циклический просмотр всего хеша?
Обратите внимание, что я не могу использовать значения ключа, поскольку в одном хеше будет несколько объектов одного типа (а значения ключей уже используются для обозначения чего-то другого).
Если есть простой способ сделать это с массивами, это также сработает (поскольку я могу легко конвертировать хэш в массив).
Спасибо!
РЕДАКТИРОВАТЬ: исправленоошибка в моем коде.