作者jjt (jet)
看板perl
標題Re: [問題] 多重hash的sorting
時間Tue Nov 6 13:51:22 2007
※ 引述《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
推 david220:嗯嗯,我本來的hash是單一key, 但是太吃ram了 11/06 14:13
→ david220:不得已才改成hierachy hash 11/06 14:14
推 LiloHuang:其實你可以不要用Perl 的 hash 來存...想想其他資料結構 11/06 15:21
→ LiloHuang:或許會是一個不錯的解決方法...:) 11/06 15:21