求一算法,

求一算法,

perl 里面
$temp = "a_c_d_中_e_中_f_f_中_f_j_中_a_c_中_d_e_中_f_a_f_e_c_a_d_a_a";(_)只是个分隔符。
这个字符串里面通过什么样的办法,我想要实现对temp的字符进行统计出现的次数同时进行排序最多次的放在前面,最少次数的放在后面
如何实现?谢谢各位。
怎么就没有人回呢?
用hash转储一次, 排序时sort
非perl 版本 tr "_" "\n" | sort | uniq -c | sort
my $temp = "a_c_e_g_d_e_f_g";
my %h;

foreach (split(/_/, $temp))
{
    $h{$_}--;
}

foreach (sort {$h{$a} <=> $h{$b}} (keys %h))
{
        print "$_: ", -$h{$_}, "\n";
}


QUOTE:
原帖由 topd 于 2007-11-22 10:54 发表
非perl 版本 tr "_" "\n" | sort | uniq -c | sort

1. 不清楚sort对中文的支持如何... 还是只要locale是utf8就行?
2. 最后一个sort应该sort -nr
啊……为什么喜欢用减号……
逆向思维高手?


QUOTE:
原帖由 perljoker 于 2007-11-22 12:22 发表
啊……为什么喜欢用减号……

话说逆向排序比较麻烦 ...


QUOTE:
原帖由 cfk 于 2007-11-22 12:25 发表


话说逆向排序比较麻烦 ...

不是说sort{$b<=>$a}@array就逆序么……


QUOTE:
原帖由 perljoker 于 2007-11-22 12:33 发表

不是说sort{$b$a}@array就逆序么……

恩, 要明白, 有人就是比较笨啊 ...