首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何合并来自两个散列的数据,并记住原始数据来自哪个散列?

如何合并来自两个散列的数据,并记住原始数据来自哪个散列?
EN

Stack Overflow用户
提问于 2013-12-03 12:57:34
回答 1查看 93关注 0票数 0

我有两个哈希:

代码语言:javascript
复制
skills => {"Slice"=>9, "Kick"=>2, "Angle"=>1, "Topspin"=>1, "Shorten Backswing"=>1, "Balance"=>1}
categories => {"Serve"=>8, "Forehand"=>7}

我需要返回与两个列表之间最大的三个值相关联的键。我还需要跟踪该密钥来自哪个哈希。

最后,我需要上述两个哈希来屈服:

代码语言:javascript
复制
"Slice"=>9, "Serve"=>8, "Forehand"=>7

不知何故,需要知道Slice是一种技能,而ServeForehand是分类。也许是这样:

代码语言:javascript
复制
"Slice"=>[9, "skill"], "Serve"=>[8, "category"], "Forehand"=>[7, "category"]

我认为这样做的一种有效方法是将值更改为数组,其中第一个对象是我的整数值,第二个对象是技能或类别:

代码语言:javascript
复制
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]}

然后将两者合并:

代码语言:javascript
复制
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"]}

然后用哈希键返回数组第一个对象中值最高的对象,然后使用第二个值声明对象是技能还是类别。

然而,这变得非常麻烦,我觉得我缺少了一些更优雅的方式来完成类似的任务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 13:17:26

我可能会尝试一种面向对象的方法。类似于:

代码语言:javascript
复制
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>]
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20351881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档