如何从哈希表中获取最大值

3
我想从哈希表中获取最大值,但我一直得到的是第一个。
Crypto_name = ["Bitcoin", "Ethereum", "Project-x", "Fake"]
Crypto_price = ["$5500.6", "$538.9", "$0.25", "$46000.09"]
$crypto = Crypto_name.zip(Crypto_price).to_h

def largest_hash_key
  puts $crypto.max_by{|a,b| b.to_i}
end

largest_hash_key

顺便提一下:如果可能的话,你应该尽量将数值与货币分开。这将使像这样的任务变得更加容易(和清晰)。 - Zonet
2个回答

2
根据crypto_price中每个字符串的格式,您需要删除任何非数字字符,其中4个元素中,$是不必要的。 max可以帮助您:
$crypto.max { |value| value.last.delete('$').to_f }
# "$46000.09"

通过去掉$符号,您可以得到一个可转换为浮点数的数字,然后可以进行比较。
我盲目地假设"$"是它们中唯一不需要的一个字符。但这种情况并不总是如此。

1
也许是 str_price[1..-1].to_f... - Cary Swoveland
如果输入始终如此@CarySwoveland,我同意,但在像“$5500.6”这样的情况下,第一个字符永远不会是“$”符号。 - Sebastián Palma

0

也许

$crypto.max_by{|a,b| b.tr('^0-9''.','').to_f}

我认为这适用于任何符号和任何顺序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接