首页 / 知识
在Perl中,如何创建其键来自给定数组的哈希?
2023-04-17 08:17:00

In Perl, how do I create a hash whose keys come from a given array?假设我有一个数组,而且我知道我会做很多"该数组是否包含X?" 检查。 执行此操作的有效方法是将数组转换为哈希,其中键是数组的元素,然后您可以说
有没有简单的方法可以执行此数组到哈希的转换? 理想情况下,它应该足够通用以接受匿名数组并返回匿名哈希。
它不如" @hash {@array} = ..."解决方案那么短,但是那些解决方案要求哈希和数组已经在其他地方定义,而该解决方案可以采用匿名数组并返回匿名哈希。 这是将数组中的每个元素都与" 1"配对。当此(键,1,键,1,键1)对的列表分配给哈希时,奇数的键成为哈希的键,而偶数的键成为各自的值。
这是一个散列片,是散列中的值的列表,因此它的前面是列表y @。 从文档:
在这里使用
当您意识到左值(即=左侧的表达式)是从哈希表中构建出来的列表时,那么就会开始理解为什么我们使用该 这里的想法是您使用哈希作为集合。重要的不是我分配的值;只是钥匙的存在。因此,您要做的不是:
代替:
实际上,仅运行
请注意,如果键入
我一直以为
至少很好并且可读/可维护。 这里有一个前提,即做很多"数组是否包含X?"的最有效方法。检查是将数组转换为哈希。效率取决于稀缺的资源,通常取决于时间,但有时取决于空间,有时取决于程序员的工作量。通过同时保留一个列表和该列表的哈希,您至少要使所消耗的内存增加一倍。另外,您还要编写更多原始代码,这些代码需要进行测试,记录等。
或者,查看List :: MoreUtils模块,特别是功能
我进行了一个快速测试,将/ usr / share / dict / words的一半加载到一个数组(25000个单词)中,然后从数组中整个字典(每第5000个单词)中选择11个单词,同时使用这两个数组-to-hash方法和List :: MoreUtils中的
在从源代码构建的Perl 5.8.8上,array-to-hash方法的运行速度比
但是,这还不是全部内容-数组到哈希的转换大约需要0.04秒,在这种情况下,数组到哈希方法的时间效率比
我的直觉是,在大多数情况下,数组到哈希方法将胜过
同样值得一提的是完整性,我使用2个相同长度的数组
在perl 5.10中,有一个接近魔术的~~运算符:
看到这里:http://dev.perl.org/perl5/news/2007/perl-5.10.0.html Raldi的解决方案可以做到这一点(不需要原始的'=>'):
此技术还可用于将文本列表转换为哈希:
此外,如果您有一行这样的值:" foo = 1,bar = 2,baz = 3",则可以执行以下操作:
[编辑包括] 提供的另一种解决方案(需要两行)是:
您也可以使用Perl6 :: Junction。
给定(请注意,重复的键将在数组的最大位置获取值-即8-> 2而不是6)
如果不想污染名称空间,可以将代码放入子例程。
甚至更好:
如果您真的想传递数组引用:
如果您进行了大量的设定理论运算-您也可以使用Set :: Scalar或类似的模块。然后 您可能还想签出Tie :: IxHash,它实现了有序的关联数组。这样一来,您就可以在数据的一个副本上进行两种类型的查找(哈希和索引)。 |
最新内容
相关内容
linux操作数据库命令?
linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参数,如何实现MySQL数据库的基本用法在linux下1、mysql all-databaselinux系命令的操作?
linux系命令的操作?,工作,系统,信息,网络,命令,基础,简介,管理,目录,操作,linux的cd命令的使用方法cd ~:回到用户家目录。注:这得看你是用什么用linux执行多次命令?
linux执行多次命令?,系统,信息,标准,工作,情况,命令,周期性,服务,代码,时间,linux系统能把很多命令一起执行,然后结果输出一个文件吗?就是scrilinux显示操作命令?
linux显示操作命令?,系统,工作,地址,信息,管理,命令,目录,基础,工具,标准,linux常用命令1、linux系统常用操作命令linux系统常用操作命令如下:llinux并行化执行命令?
linux并行化执行命令?,系统,工具,信息,命令,名称,网络,管理,首页,服务,暂停,Linux多台主机批量执行命令1、执行命令(记得先对doCommand.s h增加如何执行linux命令?
如何执行linux命令?,单位,系统,网络,信息,权威,命令,文件,音乐,目录,选项,mv什么意思呢?1、MV就是音乐短片(Music Video),是指与音乐(通常大部分是linux打断执行的命令?
linux打断执行的命令?,系统,状态,网站,标准,通用,客服,人员,名字,网络,暂停,Linux停止命令继续执行的方法是什么它只是在进程中维持挂起的状态检查linux服务器命令?
检查linux服务器命令?,系统,信息,状态,情况,时间,工具,网络,环境,服务,电脑,如何查看linux服务器的版本和配置信息?1、登录到linux服务器执行llinux操作常用命令?
linux操作常用命令?,工作,系统,地址,信息,命令,目录,管理,标准,基础,工具,linux常用命令及用法linux系统常用操作命令如下:ls:全拼list,功能是列linux命令没执行完?
linux命令没执行完?,系统,设备,工具,情况,密码,状态,电脑,管理,材料,服务,Linux:写的脚本执行过程中为什么会有cp未复制完,或者tar未解压完的linux操作命令重命名?
linux操作命令重命名?,图片,软件,名称,名字,文件,命令,状态,代码,工具,系统,Linux下批量修改文件名1、Linux下修改文件名有mv和rename。 其中mshell中执行linux命令?
shell中执行linux命令?,系统,名称,环境,管理,工作,代码,技术,软件,经理,基础,it运维需要学什么?1、单纯学编程语言本身,对于一些英文符号,需要记