免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11498 | 回复: 7
打印 上一主题 下一主题

【求助】Perl中二维数组如何排序? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-30 13:55 |只看该作者 |倒序浏览
现在有一个二维的数组,如:
$list[0][0]="s"
$list[0][1]="3"

$list[1][0]="d"
$list[1][1]="4"

$list[2][0]="w"
$list[2][1]="2"

$list[3][0]="h"
$list[3][1]="0"

$list[4][0]="j"
$list[4][1]="9"

如果我想按第一列排序,用Perl应该怎么做啊?
谢~

论坛徽章:
0
2 [报告]
发表于 2006-06-30 17:01 |只看该作者
#!/usr/bin/perl -w
use strict;
my @list=(
                ["s","3"],
                ["d","4"],
                ["w","2"],
                ["h","0"],
                ["j","9"],
);
my %hash=();
foreach my $row (@list){
        $hash{$row->[0]}=$row->[1];
}
foreach (sort keys %hash){
                print "$_,$hash{$_}\n";
}
不知道能不能满足你的需求?

论坛徽章:
0
3 [报告]
发表于 2006-06-30 17:31 |只看该作者
原帖由 海天 于 2006-6-30 17:01 发表
#!/usr/bin/perl -w
use strict;
my @list=(
                ["s","3"],
                ["d","4"],
                ["w","2"],
         ...

太谢谢你了~
我去试试先~

论坛徽章:
0
4 [报告]
发表于 2006-07-04 13:04 |只看该作者
use strict;

my @list;
$list[0][0]="s";
$list[0][1]="3";

$list[1][0]="d";
$list[1][1]="4";

$list[2][0]="w";
$list[2][1]="2";

$list[3][0]="h";
$list[3][1]="0";

$list[4][0]="j";
$list[4][1]="9";

@list = sort{$a->[1] <=> $b->[1]} @list;

for(@list){
    print $_,' ' for @{$_};
    print "\n";
}

论坛徽章:
0
5 [报告]
发表于 2007-03-14 09:37 |只看该作者
如果再加一列应该如何处理呢?
my @list=(
                ["s","3","as2"],
                ["d","4"."asssd"],
                ["w","2"."sa"],
          ...

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2007-03-14 09:48 |只看该作者
直接 sort 就可以了啊!

@list = sort { $a->[0] cmp $b->[0] } @list;

论坛徽章:
0
7 [报告]
发表于 2007-03-14 10:42 |只看该作者
my @list=(
                ["1","3a","hh"],
                ["2","4","gg"],
                ["2g","4","ff"],
                ["2g1","4","ff"],
                ["12","2","aa"],
                ["12g","2","bb"],
                ["12g1","2","cc"],
                ["12g2","2","dd"],
                ["12g11","2","ee"],
                ["121","2as","ee"],
                ["122","as2as","asee"],
           );
二位数组是这样,按照第一列排序(排成现在这个结果),我只是通过
my @keys =
map ({ join 'g',@{$_} }
    sort ({ $a->[0] <=> $b->[0]
            or $a->[1] <=> $b->[1]}
            map { [split/g/] } @keys
         )
    );(参照仙子的脚本)

对第一列进行排序,不知放到二位数组中应该如何?

论坛徽章:
0
8 [报告]
发表于 2007-03-14 12:31 |只看该作者
我晕 这不是跟一维的 一样的吗

只不过在交换数值的时候 一维只是交换 list[0] 和 list[1]
                       二维在交换 list[0][0] 和 list[1][0] 后再交换 list[0][1] list[1][1]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP