Summing the Hash - как мне добавить общую стоимость заказов в этом хэше - PullRequest
0 голосов
/ 29 сентября 2019
basket = { 
"potato wedges" : 4.45 => 2,
"tiramisu : 4.95 => 2,
"diet coke" : 1.75 => 2
}

Я хочу суммировать этот хеш - значения представляют количество элементов, число в ключе представляет цену.КАК МОЖНО вычислить общую стоимость этих предметов \ СПАСИБО

Ответы [ 2 ]

2 голосов
/ 29 сентября 2019

Предполагая, что вы хотели написать хеш-код, подобный этому:

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
0 голосов
/ 29 сентября 2019

Один из вариантов - использовать векторные методы.

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 .Регулярное выражение /(?<=:).+/ гласит: «соответствует одному или нескольким символам (.+), непосредственно предшествующим двоеточию», (?<=:) - это позитивный взгляд позади .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...