我有两个哈希:
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"]}然后用哈希键返回数组第一个对象中值最高的对象,然后使用第二个值声明对象是技能还是类别。
然而,这变得非常麻烦,我觉得我缺少了一些更优雅的方式来完成类似的任务。
发布于 2013-12-03 13:17:26
我可能会尝试一种面向对象的方法。类似于:
class Base
attr_accessor :name, :value
def initialize(name, value)
@name, @value = name, value
end
def inspect
"#<#{self.class} name=#{name.inspect} value=#{value.inspect}>"
end
end
class Skill < Base
end
class Category < Base
end
skills = [Skill.new("Slice", 9), Skill.new("Kick", 2), Skill.new("Angle", 1), Skill.new("Topspin", 1), Skill.new("Shorten Backswing", 1), Skill.new("Balance", 1)]
categories = [Category.new("Serve", 8), Category.new("Forehand", 7)]
(skills + categories).sort_by(&:value).reverse.first(3)
#=> [#<Skill name="Slice" value=9>, #<Category name="Serve" value=8>, #<Category name="Forehand" value=7>]https://stackoverflow.com/questions/20351881
复制相似问题