【问题标题】:Ruby: get hash pair with max valueRuby:获取具有最大值的哈希对
【发布时间】:2017-05-29 00:42:54
【问题描述】:

这是一个哈希值,用于记录我有多少水果

水果 = {“苹果” => 10,“梨” => 15,“香蕉” => 15,“葡萄” => 12}

我想知道我最喜欢哪种水果。
如果有决胜局,则将其全部退回。

【问题讨论】:

  • 抱歉,我没能拿到“决胜局”部分。如果哈希是您示例中的哈希,我将只返回所有这些?
  • @Keikoku,你能澄清一下“全部归还”是什么意思吗?这是否意味着返回整个哈希?或者这是否意味着只返回与最高值绑定的那些键?
  • 只返回那些与最高价值并列的人

标签: ruby


【解决方案1】:
# easy
max_quantity = fruits.values.max
max_fruits = fruits.select { |k, v| v == max_quantity }.keys

# fast                                                                          
max_quantity = -1.0/0.0
max_fruits = []
fruits.each do |k, v|
  if v > max_quantity
    max_quantity = v
    max_fruits = []
  end
  max_fruits.push k if v == max_quantity
end

由于异常情况是 Bad(tm),所以这两个总是返回一个数组。

【讨论】:

  • 选择块比另一个慢?
  • 我没有量过。可以肯定的是,一个主要是原生的,另一个主要是 Ruby,所以我实际上可能是不正确的:p 但最上面的一个将对数据进行四次循环(valuesmaxselectkeys),底部的只会做那个。顶部的肯定更具可读性,在实践中速度优势,即使存在,也可以忽略不计。底部示例的最大价值实际上是学习如何在没有库帮助的情况下自己完成。
【解决方案2】:
max_value = fruits.values.max
keys = fruits.select{|k, v| v == max_value}.keys

【讨论】:

  • 没有解决“如果有决胜局则全部归还”的问题。
  • 是的,确实如此。将返回["pears", "bananas"]。 “全部归还”是指所有平局者归还。
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 2016-11-18
  • 2011-08-22
  • 2017-02-16
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多