关于%hash的排序问题

关于%hash的排序问题

关于%hash的排序问题
$hash={
我 =>{ i=>1123,me=>67,my=>234,our=>345,???????},
喜欢=>{like=>434,love=>456,perfer=>68,?????????????},
????????????????????????????????????????????????????????????????????????
};
想按键值大小得到每项中文的前二种最可能的结果,并提取出来.
例如:对于“我”得到:i(1123),our(345);
对于“喜欢”得到:love(456),like(434);
怎么办????
谢谢!




   

[quote]#!/usr/bin/perl <.
[quote]#!/usr/bin/perl
# cnhacktnt { at } perlchina.org
use strict;

my $hash = {
'我' => { i=>1123,me=>67,my=>234,our=>345},
'喜欢' => {like=>434,love=>456,perfer=>68}
};

for my $key (keys %$hash) {
print hashref_sort($hash->{$key}),"\n";
}

sub hashref_sort($){
my $ref=shift;
my @array;
while( my ( $key,$value ) = each %$ref ){
push @array,"$key($value)";
}
@array = map {
$_->[0]
} sort {
$b->[1] <=> $a->[1]
} map {
[$_ , /\((\d+)\)/]
} @array;
return join (',',@array);
}[/quote]
运行结果:
[quote]E:\mywork\catalyst>perl t.pl
i(1123),our(345),my(234),me(67)
love(456),like(434),perfer(68)[/quote]
全给你排一遍,至于怎么取前两个,你自己应该知道吧?呵呵




   

谢谢cnhacktnt
比我想得到的结果还详尽!谢谢!
[CCB]2[/CCB]
实际上,你组织数据结构的.
实际上,你组织数据结构的时候就应该把你的哈希结构反过来组织,这样的话,就简单多了。
还请楼上的大侠明示

还请楼上的大侠明示![CCB]10[/CCB]
rjhome的意思就是把你的值.
rjhome的意思就是把你的值和键对调一下

$hash={
我 =>{ 1123=>i,67=>me,234=>my,345=>our,???????},
????????????????????????????????????????????????????????????????????????
};

这样就不用累死TNT了,嘿嘿。
谢谢各位
谢谢各位对小弟的指点
perl 太博大精深了?????????????????
还请问一下:
有没有关于排列组合的模块啊

比如说:
在上面我提出的问题中:
对于“我”得到:i, our
对于“喜欢”得到:love,like
对于"书"得到: books,book
这样对于我喜欢书这个句子,就会有8种可能啊
怎么的得到这八种可能呢?由于句子的长度是可变的,所以处理起来比较头疼.能否给我点提示???????
[CCB]c39[/CCB]




   

呵呵,这个就需要你自己去找或者想算法了...
谢谢 .我也是用的迭代的方法
谢谢了
我也是用的迭代的方法.