Re: [問題] 將很像hash形式中的值相加?

看板Perl作者 (c9s)時間16年前 (2009/04/25 02:19), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串5/5 (看更多)
※ 引述《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
謝謝您清楚的解釋!! 深深受教了:D
04/25 09:01, 1F
文章代碼(AID): #19yWAwAO (Perl)
文章代碼(AID): #19yWAwAO (Perl)