【发布时间】:2013-12-03 21:17:26
【问题描述】:
我有两个哈希:
skills => {"Slice"=>9, "Kick"=>2, "Angle"=>1, "Topspin"=>1, "Shorten Backswing"=>1, "Balance"=>1}
categories => {"Serve"=>8, "Forehand"=>7}
我需要返回与两个列表之间最大的三个值关联的键。 我还需要跟踪该密钥来自哪个哈希。
最终我需要以上两个哈希来产生:
"Slice"=>9, "Serve"=>8, "Forehand"=>7
不知何故需要知道Slice 是一种技能,Serve 和Forehand 是类别。
可能是这样的:
"Slice"=>[9, "skill"], "Serve"=>[8, "category"], "Forehand"=>[7, "category"]
我认为这样做的有效方法是将值更改为数组,其中第一个对象将是我的整数值,第二个对象将是技能或类别:
skills => {"Slice"=>[9, "skill"], "Kick"=>[2, "skill"], "Angle"=>[1, "skill"], "Topspin"=>[1, "skill"], "Shorten Backswing"=>[1, "skill"], "Balance"=>[1, "skill]}
categories => {"Serve"=>[8, "category"], "Forehand"=>[7, "category]}
然后合并两者:
all_objects => {"Slice"=>[9, "skill"], "Kick"=>[2, "skill"], "Angle"=>[1, "skill"], "Topspin"=>[1, "skill"], "Shorten Backswing"=>[1, "skill"], "Balance"=>[1, "skill"], "Serve"=>[8, "category"], "Forehand"=>[7, "category"]}
然后返回数组第一个对象中哈希键值最高的对象,然后用第二个值声明该对象是技能还是类别。
然而,这变得非常麻烦,感觉就像我错过了完成类似任务的更优雅的方式。
【问题讨论】:
-
看来你正在陷入数据结构的地狱。我建议创建一个 Player 类来封装逻辑,为上述行为提供名称,并简化代码。
-
想想你的问题;听起来您确实在要求我们为您编写代码,但您没有展示您尝试过的内容。 “要求代码的问题必须证明对正在解决的问题有最低限度的了解。包括尝试过的解决方案、它们为什么不起作用以及预期的结果。另请参阅:Stack Overflow question checklist”
-
抱歉,我觉得我现有的代码只会让读者感到困惑,因为它是一团糟(这就是我在这里发布的原因)。也许它会更适合 codereview.stackexchange.com 。
标签: ruby-on-rails ruby hash