Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在perl中合并2个深度哈希

如何在perl中合并2个深度哈希
EN

Stack Overflow用户
提问于 2010-10-30 19:35:29
回答 2查看 3.9K关注 0票数 3

我在Perl中编写了一个sub来合并两个相同结构的散列;这样merge($a,$b)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$a = {
 k1 => { sk1 => 'v1' },
 k2 => { sk3 => 'v3', sk4 => 'v4' }
};
$b = {
 k1 => { sk2 => 'v2'},
 k3 => { sk5 => 'v5'} 
};

会导致

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$c = {
 k1 => { sk1 => 'v1', sk2 => 'v2' },
 k2 => { sk3 => 'v3', sk4 => 'v4' }
 k3 => { sk5 => 'v5'} 
};

下面是我的合并代码,它不能工作。我该怎么纠正它呢?谢谢。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sub merge {
 my ($old,$new) = @_;
 foreach my $k (keys($old)) {
  if (exists $new->{$k}) {
   if (ref($old->{$k}) eq 'HASH') {
    merge($old->{$k},$new->{$k});
   } else {
    $new->{$k} = $old->{$k};
   } 
  } else { 
   $new->{$k} = $old->{$k};
  }
 }
 return $new;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-30 19:48:32

除非您这样做只是为了了解它是如何实现的,否则我会使用预先准备好的解决方案,如Hash::MergeHash::Merge::Simple

票数 10
EN

Stack Overflow用户

发布于 2010-10-30 21:44:16

这应该足够好了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for my $href ($a, $b) {
    while (my($k,$v) = each %$href) {
        $c->{$k} = $v;
    }
}

如果您不想重复,可能是因为您担心排序问题,那么可以使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for my $href ($a, $b) {
    while (my($k,$v) = each %$href) {
        push @{ $c->{$k} },  $v;
    }
}

自己做这个非常简单的操作的好处是,它有助于开发具有基本Perl数据结构的工具,这是流利使用该语言的关键。

但请注意,这些是表面副本,因此引用将被共享。这不是深度拷贝。

我使用each而不是keys,以便在您使用包含数百万个元素的DBM hashes时进行扩展。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4060331

复制
相关文章
如何在Dart中合并列表
在 Dart 编程中,List 数据类型类似于其他编程语言中的数组。列表用于表示对象的集合。它是一组有序的对象。Dart 中的核心库负责 List 类的存在、创建和操作。有 5 种方法可以组合两个或多个列表:
徐建国
2021/12/01
2.1K0
哈希Map合并工具类
有两个哈希Map,如果要实现Map追加的话,可以使用putAll()方法,不可以使用put()方法,但是如果出现两个Map有相同的key,但是值不同,这种情况就可以使用这个工具类进行集合合并
SmileNicky
2019/01/17
9250
如何在CentOS上安装Perl 5
Perl5是一种全功能的编程语言。它用于所有类型的生产项目,包括世界各地的商业业务系统。Perlbrew是Perl5的安装和版本切换工具,您可以安装,删除,并在之间切换Perl版本。
谢鸢
2018/07/31
3.9K0
如何在Git中精确追踪提交合并时间
这将会展示分支上所有的提交记录。可以在输出中搜索提交ID,如果找到了,那么它就是被合入该分支的。
运维开发王义杰
2023/09/19
7450
如何在Git中精确追踪提交合并时间
Java基础之哈希Map合并工具类
有两个哈希Map,如果要实现Map追加的话,可以使用putAll()方法,不可以使用put()方法,但是如果出现两个Map有相同的key,但是值不同,这种情况就可以使用这个工具类进行集合合并
SmileNicky
2022/05/07
9780
PHP中,使用递归深度合并多个数组
函数源码: //导入待合并数组,引用$array数组接收 function merge(array &$array,array ...$mergeArray): array { foreach ($mergeArray as $item){ mergeOne($array,$item); //对每个待合并数组执行合并函数 } return $array; } //如果仅有两个数组需要合并,也可以直接使用此函数 function mergeOne(&$array,$p
lascyb
2021/11/01
2.2K0
Deep Hash(深度哈希算法)
哈希的简单介绍: 用一个比喻来说明什么是哈希算法:假设有N只小猪,它们的体重各不相同,一开始我们把它们放在一个猪圈里面。如果想寻找其中某只小猪,只能一个一个的找,很耗时间。现在我们用哈希算法的思想来管理小猪,我们按照小猪的体重来分猪圈。现在如果你想要找其中某一只小猪,先看看他的体重,然后到对应体重的猪圈里面寻找,这样时间就节省了。 上面的比喻中的小猪的体重就相当于Hash_code,每个变量都有一个Hash_codee。如果用哈希算法来查找某一个变量,首先要匹配Hash_code,这样就能快速的查找了。
计算机视觉研究院
2018/04/17
3.4K0
Deep Hash(深度哈希算法)
如何在前端应用中合并多个 Excel 工作簿
SpreadJS是纯前端的电子表格控件,可以轻松加载 Excel 工作簿中的数据并将它们呈现在前端浏览器应用的网页上。
葡萄城控件
2023/10/11
2950
如何在前端应用中合并多个 Excel 工作簿
如何在 ClickHouse 中避免深度分页问题
在日常的业务场景中,我们经常会遇到查询 TOP N 的需求。在 ClickHouse 中,一种常见的实现 TOP N 的 SQL 模板如下所示:
Nauu
2020/05/29
8.7K1
如何在Chatbot中应用深度学习? | 赠书
本书节选自图书《深度学习算法实践》 文末评论赠送本书,欢迎留言! 人类其实从很早以前就开始追求人类和机器之间的对话,早先科学家研发的机器在和人对话时都是采用规则性的回复,比如人提问后,计算机从数据库中找出相关的答案来回复。这种规则性的一对一匹配有很多限制。机器只知道问什么答什么,却不知道举一反三,比如你问它:“今天天气怎么样?”它会机械地把今天的天气告诉你。这不像人与人之间的对话,人是有各种反应的,这类反应的产生是基于人的知识结构和对话场景的。 那么,你觉得这类机器是否真的具有智能了?图灵测试是这样判断机器
用户1737318
2018/06/05
7070
perl语言
title: perl语言 文章目录 title: perl语言 perl语言语法 基础语法 perl语言语法 基础语法 perl语言不需要main函数 perl语言变量的声明 每局表达式需要一个分号; perl语言有标量和复数 perl语言不存在整数,都是双精度浮点数计算。 字符串就是一个字符序列,可以是任何的字母货符号 image.png 字符的链接是用 . 来链接: image.png #!/usr/bin/perl #指定perl解释器 use 5.010; #引入高版本特性
AI拉呱
2021/01/14
1.7K0
如何在Android中优雅的分发深度链接
DeepLinkDispatch提供了一种声明式的, 基于注解的API, 用于定义应用深度链接.本文是TonnyL创作的文章,希望可以支持下原作者的博客。如果你想学习,找不到好的途径,学习提高技术的方法,提高面试技术等都可以公众号后台咨询,关注本留言。
开发者技术前线
2020/11/23
2.1K0
如何在Android中优雅的分发深度链接
Leetcode|并查集+哈希表|721. 账户合并
1 并查集 + 双哈希表 此处要用两个哈希表,功能分别为 存储每个去重邮箱到用户ID的映射,以①在并查集union前帮助并查集判断两个重复邮箱是否同一人;②在并查集union后作为输入查找根节点用户ID,然后添加到每个用户ID到所属邮箱列表的映射 存储每个用户ID到所属邮箱列表的映射 class UnionFind { public: int count; vector<int> parent, size; UnionFind(int n) { count
SL_World
2021/09/22
4060
Leetcode|并查集+哈希表|721. 账户合并
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。
AiDBA宝典
2019/09/30
29.1K0
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
如何在以太坊合并中找到机会?
以太坊合并可能导致一场经济上的混乱局面,而在这一系列不确定中,仍存在确定性的机会。
小将
2022/08/11
5430
如何在以太坊合并中找到机会?
Perl Learning - 3 (A
While scalar is single value, list is a list of scalars in order. Every element of a list is a dependant scalar, it can be number or characters.
py3study
2020/01/10
1.1K0
如何在深度学习竞赛中获得前五名
本文中的所有代码都在GitHub Repository上。数据集已经在适当的文件夹中,并且代码可以运行(在安装PyTorch之后)。
代码医生工作室
2020/04/20
7920
翻译:Perl代码审计:Perl脚本中存在的问题与存在的安全风险
程序设计语言通常不构成安全风险,风险是由程序员带来的。几乎每种语言都有某些缺陷,这些缺陷在某种程度上可能有助于创建不安全的软件,但软件的整体安全性仍然在很大程度上取决于开发者的安全意识。Perl也有安全“陷阱”,然而大多数Perl程序员并不了解这些陷阱。
王驭停
2021/08/27
2.7K0
perl文件句柄_perl文件句柄信号引用
大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。 Jetbrains全系列IDE稳定放心使用
全栈程序员站长
2022/11/02
1.9K0
点击加载更多

相似问题

在perl中创建深度哈希映射

13

可变深度的Perl -哈希引用结构

22

Perl的完美哈希函数(如gperf)?

28

如何在Perl中迭代哈希(哈希)?

80

木偶:将数组深度合并为哈希

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文