作者kornelius (c9s)
看板Perl
标题Re: [问题] 将很像hash形式中的值相加?
时间Sat Apr 25 02:19:34 2009
※ 引述《adu (^_^)》之铭言:
: 有尝试写一个Script,不过也是error百出
: @array = qw{5 12 5 3}; #先做前处理,让资料都是数字
: @array = %KV; #把5 12 5 3变成hash
: while(keys %KV) { #如果有%KV的存在
: if(keys %KV = keys %KV){ #如果hash中有两个相同的key
: values %KV = (values %KV + values %KV) #则把value相加
: }
: 原本以为会顺利,还是出现error..
: 能请问版大们怎麽改正吗:)
if 少了 "}"
perl5 还没有这麽聪明能够直接 keys %hash == keys %hash 唷。
另外 while( keys %KV ) 实际上 while 需要的是一个 boolean context 和 for 是不
一样的。所以你在 keys %KV 的 key 并不会放到 $_ 中。
values %KV = (values %KV + values %KV)
行不通。为什麽呢? values 并非 lvalue ,他实际上只能传回 list.
所以 values %KV = ... 是不行的。
然而 keys %hash = 200; 为什麽行得通是因为 keys 提供了 lvalue
所以可以设置 hash 的大小。
再来, values %KV + values %KV 为什麽行不通
首先没有加上圆括号,所以会变成 values( %KV + values %KV )
然而 %KV 是 hash , values %KV 是 list 所以会造成错误。
就算是直接 values(%KV) + values(%KV)
这样的结果是 values(%KV) 传回的 list 大小相加。而非元素对元素相加。
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.168.163
※ 编辑: kornelius 来自: 122.117.168.163 (04/25 02:20)
1F:→ adu:谢谢您清楚的解释!! 深深受教了:D 04/25 09:01