Arrays 如何从散列中获取最大值

Arrays 如何从散列中获取最大值,arrays,ruby,hash,Arrays,Ruby,Hash,我想从散列中获取最大值,但我一直在获取第一个值 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

我想从散列中获取最大值,但我一直在获取第一个值

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

根据crypto_price中每个字符串的格式,您需要删除任何非数字字符,对于这4个元素,
$
是您不需要的

max
可以帮助您:

$crypto.max { |value| value.last.delete('$').to_f }
# "$46000.09"
通过删除
$
,您可以得到一个“可转换”为浮点的数字,然后可以进行比较

我盲目地认为“$”是其中唯一不需要的字符。但情况并非总是这样。

也许吧

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

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

也许
str_price[1..-1]。为了……
我同意@CarySwoveland的输入是否总是那样,但是在
“$5500.6”
这样的情况下,第一个字符永远不会是“$”符号。附带说明:如果可能,您应该真正尝试将这些值与货币分开。这将使这样的任务更容易(更干净)。