Re: [問題] 多重hash的sorting

看板Perl作者 (jet)時間16年前 (2007/11/06 13:51), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《david220 (累)》之銘言: : 標題: [問題] 多重hash的sorting : 時間: Mon Nov 5 14:53:47 2007 : : $p{2}->{1}->{1} = 1; : $p{2}->{2}->{2} = 4; : $p{2}->{3}->{4} = 2; : $p{1}->{1}->{8} = 8; : $p{1}->{2}->{16} = 5; : $p{1}->{3}->{24} = 7; : : 請問如果我要sorting以上hash : 並輸出對應的key(key不一定是數字),該怎麼做? : : 希望的輸出 : 2->1->1 : 2->3->4 : 2->2->2 : 1->2->16 : 1->3->24 : 1->1->8 : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.112.29.131 : 推 redmist:一定要用多重key來排序?轉成單一key會比較容易處理 11/05 16:16 : 推 david220:用多重key就已經用掉6G的ram了,單一key會炸 0rz 11/05 16:45 如果資料是以下這種 : $p{2}->{1}->{1} = 1; : $p{2}->{2}->{2} = 4; : $p{2}->{3}->{4} = 2; : $p{1}->{1}->{8} = 8; : $p{1}->{2}->{16} = 5; : $p{1}->{3}->{24} = 7; 不管怎樣寫 要sort資料都要把資料列成一個array 如redmist版友說的方法--轉成單一key foreach $k1(keys %p) { foreach $k2(keys %{$p{$k1}}) { foreach $k3(keys %{$p{$k1}->{$k2}}) { $hash{"$k1 $k2 $k3"}=$p{$k1}->{$k2}->{$k3}; } } } 最後要印出來時 再把%hash的key用split切開 如果真的要做這麼大量的計算的話,建議改用c來做這部份的工作會比較好 另外看您提供的那個範例,很難想出有什麼方法可以解決 如果能夠把實際的data貼幾份上來,這樣比較容易了解:D -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.133

11/06 14:13, , 1F
嗯嗯,我本來的hash是單一key, 但是太吃ram了
11/06 14:13, 1F

11/06 14:14, , 2F
不得已才改成hierachy hash
11/06 14:14, 2F

11/06 15:21, , 3F
其實你可以不要用Perl 的 hash 來存...想想其他資料結構
11/06 15:21, 3F

11/06 15:21, , 4F
或許會是一個不錯的解決方法...:)
11/06 15:21, 4F
文章代碼(AID): #17C03Ry5 (Perl)
文章代碼(AID): #17C03Ry5 (Perl)