我试图解决以下几个问题:
“您将得到一个字典/散列/对象,其中包含某些语言和给定语言的测试结果。按结果的降序,返回测试分数至少为60的语言列表。
例子:{"Java“=> 10,"Ruby”=> 80,"Python“=> 65} -> "Ruby",”=>“
{“印地语”=> 60,“荷兰语”=> 93,“希腊语”=> 71} ->“荷兰语”,“希腊语”,“印地语”
{"C++“=> 50,"ASM”=> 10,"Haskell“=> 20} -> []
我很难按结果按降序排序。这是我到目前为止所拥有的
def my_languages(results)
array = []
results.each { |a,b|
results.values.sort.reverse
if b.to_i >= 60
array << a
end
}
return array
end
不是最优雅的解决方案,但我是一个完整的Ruby新手(堆栈溢出新手也-对不起!)任何建议都将不胜感激!
发布于 2019-03-20 20:12:02
你把分类和过滤阶段混在一起。我的解决方案
value >= 60
实现滤波结果-v
)发布于 2019-03-20 20:23:42
h = { "Java" => 10, "Ruby" => 80, "Python" => 65 }
h.select { |_,v| v >= 60 }.
keys.
sort_by { |k| -h[k] }
#=> ["Ruby", "Python"]
步骤如下。
g = h.select { |_,v| v >= 60 }
#=> {"Ruby"=>80, "Python"=>65}
a = g.keys
#=> ["Ruby", "Python"]
a.sort_by { |k| -h[k] }
#=> ["Ruby", "Python"]
如果您不关心-h[k]
,那么可以选择两种方法。
h.select { |_,v| v >= 60 }.
keys.
sort_by { |k| h[k] }.
reverse
和
a = h.select { |_,v| v >= 60 }.
keys
a.max_by(a.size) { |k| h[k] }
我怀疑大家是否会注意到这三者在表现上有任何显著差异。
自从Rubyv2.2以来,通过、min_by
、max
和min
都被允许有一个可选的参数。
发布于 2019-03-21 15:31:36
为了使它更快,我将在映射时检查最小值:
hash = {"Hindi" => 60, "Dutch" => 93, "Greek" => 71}
hash.sort.map { |arr| arr[0] if arr[1] >= 60 }.compact
# or imo cleaner
hash.sort.select { |a| a[1] >= 60 }.map(&:first)
https://stackoverflow.com/questions/55269343
复制相似问题