如何合并来自两个哈希的数据并记住原始数据来自哪个哈希?

 假猫t_950 发布于 2023-02-13 11:09

我有两个哈希:

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"]}

然后使用在数组的第一个对象中具有最高值的散列键返回对象,然后使用第二个值来声明对象是技能还是类别.

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

1 个回答
  • 我可能会尝试面向对象的方法.就像是:

    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>]
    

    2023-02-13 11:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有