在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5522|回复: 13

[求助] 求助:perl如何将数组作为哈希的value?

[复制链接]
发表于 2013-12-9 10:36:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位:     目前正在学习用perl写脚本,算是边写边学吧。现在遇到一个问题,我想把一个array当做一个整体,作为一个hash的value。使用的是$hash{$key}=\@array。但是有个问题,就是我本来的意思是key不同,对应的array也不同,但是,我这样写,好像实际上只是给了数组的指针,一旦改变数组,前面的也都不对了。有什么办法能避免么?
发表于 2013-12-9 11:52:56 | 显示全部楼层
$hash{$key}=“@array”

试下这个。
 楼主| 发表于 2013-12-9 13:58:56 | 显示全部楼层
OK。谢谢! 我先去试试再反馈。
 楼主| 发表于 2013-12-9 16:22:45 | 显示全部楼层
回复 2# angangang3484

    不行,这样的话,value是“HASH(0x1dbdde8)"之类的东西。而无法取出里面的数组内容。    我是这样取出的:
   



  1. foreach (keys %hash) {
  2.     my $a=$hash{$_};
  3.     my @array=@$a;
  4. }


复制代码

然后,就报错:”Can't use string("HASH(0x1dbdde8)") as an ARRAY ref while "strict refs" in use at read.pl line 20."
发表于 2013-12-9 20:00:41 | 显示全部楼层
本帖最后由 angangang3484 于 2013-12-9 20:02 编辑

回复 4# oscillator_cn1


   @array = keys %hash?

要不你再描述下。论坛里强人挺多的,其他人应该可以给你答案。
 楼主| 发表于 2013-12-10 09:34:36 | 显示全部楼层
好的。就比如说,有个文件描述了memory的宽、深、多少个、单端口还是双端口等。我需要把memory的名称作为hash的key,把(深,宽,个数,端口)打包成一个数组,作为hash的value。而我产生该数组的方法是:



  1. foreach $file_name(@all_mem){
  2. while(<in>) {
  3. my @mem_arr=split(/,/,$_);
  4. $hash{$file_name}=\@mem_arr;
  5. }
  6. }


复制代码

这样的话,就出现我说的那个问题了,hash收到的只是指针,当@mem_arr的内容改变的时候,原来的key对应的value也改变了,最后hash内value的值都是一样的。
发表于 2013-12-10 11:16:27 | 显示全部楼层
回复 6# oscillator_cn1

“   把(深,宽,个数,端口)打包成一个数组,作为hash的value。”



问题在于数组不能做hash的value。


那么,你可以把(深,宽,个数,端口)打包成一个字符串,如"深_宽_个数_端口",将其作为hash的value。


这样可行的话,你通过hash取出这个list之后,再用split把它化为数组。
发表于 2013-12-11 10:37:58 | 显示全部楼层
解决了吗?
发表于 2013-12-11 10:43:55 | 显示全部楼层
我试了一下,array是直接可以做hash value的。$hash{$key} = "@array";我觉得你的问题可能不在hash赋值这上面,每次赋值完之后,是不是需要@array = “”,把数组清空,看你给每个hash的可以赋值用的都是一个数组@mem_arr,不知道是不是这样子...
发表于 2013-12-11 23:36:38 | 显示全部楼层
应该用array slice吧,把数组切片作为hash value
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 20:59 , Processed in 0.022049 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表