当前位置: 首页 > 知识库问答 >
问题:

无法在Ruby中创建哈希

林意蕴
2023-03-14

循环在具有特定键值对的文本文件上运行三次。每个循环都会返回一个新的散列,如下所示。我想将这些散列存储到另一个散列中。group p1group p2group p3是散列的关键:

"group1"
{
    "path"=>"/tmp/",
    "max_hits"=>262144,
    "min_hits"=>5240
}

"group2"
{
    "basic_size_limit"=>262144,
    "path"=> "/usr/bin/ruby",
    "max_hits"=>2412,
    "min_hits"=>871
}

"group3"
{
    "path"=>"/usr/tmp/",
    "basic_time_limits"=>[26214400, 26214401, 26214402],
}

我将上述散列初始化为groups=Hash。新建而不是我想将它们存储到散列中。我想初始化更大的散列,比如groupofgroups=hash。new{散列,key{散列[key]=hash.new}

group_of_groups = Hash.new{|hash, key| hash[key] = Hash.new}
Loop i in 1 .. 3
    groups = Hash.new
    ####
        Do something and add to the hash groups
    ####
    key_name = "group" + i
    group_of_groups[key_name] = groups
end Loop

但它只给了我{“group1”=

如何解决这个问题?


共有3个答案

墨阳羽
2023-03-14

除了其他答案,如果您需要以编程方式构建哈希,也可以这样做:

group1 = {
    "path"=>"/tmp/",
    "max_hits"=>262144,
    "min_hits"=>5240
}

group2 = {
    "basic_size_limit"=>262144,
    "path"=> "/usr/bin/ruby",
    "max_hits"=>2412,
    "min_hits"=>871
}

group3 = {
    "path"=>"/usr/tmp/",
    "basic_time_limits"=>[26214400, 26214401, 26214402],
}

group_of_groups = 
    ["group1", "group2", "group3"].each_with_object({}) do |sub_hash_name, new_hash|
        new_hash[sub_hash_name] = instance_eval(sub_hash_name)
    end

# Result
{
    "group1" => {
        "path"=>"/tmp/",
        "max_hits"=>262144,
        "min_hits"=>5240
    }, 
    "group2" => {
        "basic_size_limit"=>262144,
        "path"=> "/usr/bin/ruby",
        "max_hits"=>2412,
        "min_hits"=>871
    },
    "group3" => {
        "path"=>"/usr/tmp/",
        "basic_time_limits"=>[26214400, 26214401, 26214402],
    },
}
韦欣德
2023-03-14

如果要一次性初始化所有内容,可以将其编写为:

group_of_groups = { 
    "group1" => {
        "path"=>"/tmp/",
        "max_hits"=>262144,
        "min_hits"=>5240
    },
    "group2" => {
        "basic_size_limit"=>262144,
        "path"=> "/usr/bin/ruby",
        "max_hits"=>2412,
        "min_hits"=>871
    },
    "group3" => {
        "path"=>"/usr/tmp/",
        "basic_time_limits"=>[26214400, 26214401, 26214402],
    }
}

换行符明确了什么属于什么,但不是必需的。

齐成双
2023-03-14

如果你有3个哈希在3个变量组1,组2,

group1 = {
    "path"=>"/tmp/",
    "max_hits"=>262144,
    "min_hits"=>5240
}

group2 = {
    "basic_size_limit"=>262144,
    "path"=> "/usr/bin/ruby",
    "max_hits"=>2412,
    "min_hits"=>871
}

group3 = {
    "path"=>"/usr/tmp/",
    "basic_time_limits"=>[26214400, 26214401, 26214402],
}

group_of_groups = {"group1"=>group1, "group2"=>group2, "group3"=>group3}

# result
{
    "group1" => {
        "path"=>"/tmp/",
        "max_hits"=>262144,
        "min_hits"=>5240
    }, 
    "group2" => {
        "basic_size_limit"=>262144,
        "path"=> "/usr/bin/ruby",
        "max_hits"=>2412,
        "min_hits"=>871
    },
    "group3" => {
        "path"=>"/usr/tmp/",
        "basic_time_limits"=>[26214400, 26214401, 26214402],
    },
}

请记住,Ruby中的所有内容都是通过引用实现的,因此修改组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组组。

 类似资料:
  • 本文向大家介绍在Ruby中创建和使用哈希的教程,包括了在Ruby中创建和使用哈希的教程的使用技巧和注意事项,需要的朋友参考一下 哈希(Hash)是类似 "employee" => "salary" 这样的键值对的集合。哈希的索引是通过任何对象类型的任意键来完成的,而不是一个整数索引,其他与数组相似。 通过键或值遍历哈希的顺序看起来是随意的,且通常不是按照插入顺序。如果您尝试通过一个不存在的键访问哈

  • 我需要在Realex支付中更新现有卡上的到期日期和持卡人姓名。 哈希值语法应采用以下格式: 这里有一个例子说明它应该是什么样子 当我运行以下方法时,我得到错误: “SHA1哈希不正确-请检查您的代码和开发人员文档” 我做错了什么?

  • 我试着使用设置并查看了所有选项,但“OK”按钮无法让我完成这个过程。知道吗? 更新:确定按钮现在启用,但填写完所有内容后,我按下确定,我在控制台收到一个不同的错误: [2013-07-22 11:04:45-SDK Manager]错误:null] 访问问题:Android SDK AVD错误:null

  • 问题内容: 用Java创建哈希表(或关联数组…)的最直接方法是什么?我的google-fu提供了几个示例,但是有标准的方法吗? 有没有一种方法可以用键-值对的列表填充表,而无需为每个对分别在对象上调用add方法? 问题答案: 这两个类都可以从java.util包中找到。下面的jGuru FAQ条目 解释了两者之间的区别。

  • 基本上我知道我必须创建两个类,一个名为“链表”的类代表整个列表,一个名为“节点”的类代表列表的每个元素,但我完全迷路了,我甚至不知道如何在不同的节点中“保存”每个元素,我以前从未使用过动态数据结构。如有任何帮助,不胜感激

  • 要在redis中使用和创建队列,在python中,我是这样做的: 但是如何在redis队列中存储key:value对呢? 假设和可以是任何字符串(因此不能使用进行拆分),推送的最佳方式是什么 4个项目进入队列,并且当第5对被推入队列时,它弹出?