не могу получить правильный формат - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть хеш, похожий на этот

products = {199 =>['Shoes', 59.99], 211 =>['Shirts', 19.99], 245 =>['Hats', 25.99], 689 => ['Coats', 99.99], 712 => ['Beanies', 6.99]}

продукты = номер товара => [продукт, цена]

Моя цель - распечатать самую высокую и самую низкую цену в хэше. Пока все, что я получил, это:

products = {199 =>['Shoes', 59.99], 211 =>['Shirts', 19.99], 245 =>['Hats', 25.99], 689 =>['Coats', 99.99], 712 => ['Beanies', 6.99]}

max_value = products.max_by { |key, value| value[1] }.to_s
    print max_value

min_value = products.min_by { |key, value| value[1] }.to_s
     print min_value

Когда я его распечатываю, это выглядит так.

 ["689", ["Coats", 99.99]]
["712", ["Beanies", 6.99]]

Я бы хотел, чтобы это выглядело так

Item# 689: Coats, 99.99
Item# 712: Beanies, 6.99

У кого-нибудь есть советы для меня?

Я понял это благодаря вашей помощи. Большое спасибо. Это дает мне именно то, что я искал.

min_value = products.min_by { |value| value[1] }
puts "Item# #{min_value[0]}: #{min_value[1][0]}, #{min_value[1][1]}"

max_value = products.max_by { |value| value[1] }
puts "Item# #{max_value[0]}: #{max_value[1][0]}, #{max_value[1][1]}"

Упс, неважно. Правильный код это

min_value = products.min_by { |key, value| value[1] }
puts "Item# #{min_value[0]}: #{min_value[1][0]}, $#{min_value[1][1]}"

max_value = products.max_by { |key, value| value[1] }
puts "Item# #{max_value[0]}: #{max_value[1][0]}, $#{max_value[1][1]}"

1 Ответ

2 голосов
/ 27 февраля 2012

Предполагая, что max это второй массив, а min это первый:

puts "Min Item\# #{min[0]}: #{min[1][0]}, #{min[1][1]}"
puts "Max Item\# #{max[0]}: #{max[1][0]}, #{max[1][1]}"

Как правило, базовое форматирование в Ruby можно выполнить с помощью оператора интерполяции строки, #{} в строке в двойных кавычках. Оператор заменяет себя окончательным значением содержащихся выражений после вызова to_s для него. Ex.:

puts "Four plus four = #{4+4}"

Значение 4+4 равно 8 и 8.to_s = "8", поэтому вставляется строка "8", образуя итоговую строку "Four plus four = 8"

Для режима сложного форматирования вы будете использовать sprintf, но это огромная функция, которую вы можете посмотреть в себя.

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