Re: [問題] 將很像hash形式中的值相加?
※ 引述《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)
→
04/25 09:01, , 1F
04/25 09:01, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章