作者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
1F:推 david220:嗯嗯,我本来的hash是单一key, 但是太吃ram了 11/06 14:13
2F:→ david220:不得已才改成hierachy hash 11/06 14:14
3F:推 LiloHuang:其实你可以不要用Perl 的 hash 来存...想想其他资料结构 11/06 15:21
4F:→ LiloHuang:或许会是一个不错的解决方法...:) 11/06 15:21