basket = { "potato wedges" : 4.45 => 2, "tiramisu : 4.95 => 2, "diet coke" : 1.75 => 2 }
Я хочу суммировать этот хеш - значения представляют количество элементов, число в ключе представляет цену.КАК МОЖНО вычислить общую стоимость этих предметов \ СПАСИБО
Предполагая, что вы хотели написать хеш-код, подобный этому:
basket = { "potato wedges:4.45" => 2, "tiramisu:4.95" => 2, "diet coke:1.75" => 2 }
Вы можете получить сумму, подобную этой:
basket.sum {|k,v| k.split(':')[1].to_f * v} #-> 22.3
Один из вариантов - использовать векторные методы.
h = { "potato wedges:4.45" => 2, "tiramisu:4.95" => 2, "diet coke:1.75" => 2 }
require 'matrix' Vector[*h.keys.map { |s| s[/(?<=:).+/].to_f }].inner_product(Vector[*h.values]) #=> 22.3
См. Vector :: [] , String # [] и Vector # inner_product .Регулярное выражение /(?<=:).+/ гласит: «соответствует одному или нескольким символам (.+), непосредственно предшествующим двоеточию», (?<=:) - это позитивный взгляд позади .
/(?<=:).+/
.+
(?<=:)