perl 哈希表的排序

zll_lover 2009-01-13 10:00:37
foreach my $key ( sort {($list_Spcode_Area_Money{$b}0:$list_Spcode_Area_Money{$b})<=>$list_Spcode_Area_Money{$a})} keys %list_Spcode_Area)

由于list_Spcode_Area的key在list_Spcode_Area_Money中会存在空的现象,会报警该如何解决?
...全文
1563 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zll_lover 的回复:]
哈哈那是我自己删的,我想重新组织一下的,一回我会发上来,这个我先看看啊,你过回就看到那个帖子了,那个帖子聊
[/Quote]

你这个帖子中的问题已经解决了。
zll_lover 2009-01-15
  • 打赏
  • 举报
回复
哈哈那是我自己删的,我想重新组织一下的,一回我会发上来,这个我先看看啊,你过回就看到那个帖子了,那个帖子聊
fibbery 2009-01-15
  • 打赏
  • 举报
回复
虽然,我不算又多专家,你在发帖的时候可以选择项某某专家提问。可能你的那篇帖子的题目《排序请进特别是fibbery》不符合规定吧,为什么删除我不太清楚。
fibbery 2009-01-15
  • 打赏
  • 举报
回复

use strict;
use warnings;

my %areaArray;
$areaArray{'aa'}="aa";
$areaArray{'bb'}="bb";
$areaArray{'cc'}="cc";
$areaArray{'dd'}="dd";
$areaArray{'ee'}="ee";


my %area;
$area{'aa'}=1;
$area{'bb'}=3;
$area{'cc'}=2;
$area{'ee'}=6;

foreach my $key1 (sort {exists $area{$b} && exists $area{$a}? $area{$b} <=>$area{$a}:(exists $area{$b}?1:-1) }keys %areaArray)
{
print $key1."----".$areaArray{$key1}."\n";
}


你的那篇帖子已经被管理员删除了。

如果排序时没有的值认为是最小的,就按照上面的代码;
如果排序时没有的值认为是最大的,那就将下面的表达式
exists $area{$b}?1:-1
改成
exists $area{$b}?-1:1
Q-Luo 2009-01-14
  • 打赏
  • 举报
回复
studying
zll_lover 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fibbery 的回复:]
Perl codeif(exists $list_Spcode_Area_Money{$b})
{
...
}
[/Quote]

这样的方法不能解决,因为过程是在排序中判断出空的,你这样根本不能提前知道$b的,我只是剪切少了括号,
程序是没有问题的
iambic 2009-01-13
  • 打赏
  • 举报
回复
楼主的代码括号都不匹配……
iambic 2009-01-13
  • 打赏
  • 举报
回复
不的括号都不匹配……
Semigod 2009-01-13
  • 打赏
  • 举报
回复
提前把空的用空字符串替换掉或其它特定值替换掉
fibbery 2009-01-13
  • 打赏
  • 举报
回复
if(exists $list_Spcode_Area_Money{$b})
{
...
}
zll_lover 2009-01-13
  • 打赏
  • 举报
回复
下面的排序根本无法执行,修改下是
foreach(my $keycode(keys %list)){...}
zll_lover 2009-01-13
  • 打赏
  • 举报
回复
好的iambic,我给你贴看啊,多谢帮忙
开始我已经将
foreach(my $keycode(keys $list)){
foreach my $keyCompanyID (keys %list_CompanyID){
$list_Spcode_Area_Money{$keycode."_".keyCompanyID}=0;
}
}

foreach(my $keycode(keys $list)){
foreach my $keyCompanyID (sort {$list_Spcode_Area_Money {$keySpcode."_".$b}<=>$list_Spcode_Area_Money{$keySpcode."_".$a}} keys %list_CompanyID)
{...}
}

我已经忙活一天了还没搞定,给你加分啊谢谢了
iambic 2009-01-13
  • 打赏
  • 举报
回复
知道少了括号就把修补过的贴上来啊……
没看懂你的程序。
zll_lover 2009-01-13
  • 打赏
  • 举报
回复
我用笨办法把事先把$list_Spcode_Area_Money的所有取值的地方设置了值,没有的就是0,
可又有个问题,({($list_Spcode_Area_Money{$b}}中的$b其实实际上是$aa."-".$b,
$aa是循环外面的变量也就是$list_Spcode_Area_Money{$aa."_".$b},为什么不行,
提前我已经设置好了$list_Spcode_Area_Money{'aa'."_".$b}=0,
$aa='aa';
$list_Spcode_Area_Money{$aa."_".$b},这样就不能排,为什么

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧