免费注册 查看新帖 |

Chinaunix

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

求教一个perl数据结构排序的问题 [复制链接]

论坛徽章:
1
2015亚冠之萨济拖拉机
日期:2015-09-22 10:59:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-26 10:50 |只看该作者 |倒序浏览
现创建了一个指向数组的数组的引用
$ref_to_A = [
[ 2,1 ],
[ 2,2 ],
[ 2,3 ],
[ 1,3 ],
[ 1,2 ],
[ 1,1 ],
[ 3,2 ],
[ 3,1 ],
[ 3,3 ],
];
要怎么实现成下面这样的排序呢?
$ref_to_A = [
[ 1,3 ],
[ 2,3 ],
[ 3,3 ],
[ 1,2 ],
[ 2,2 ],
[ 3,2 ],
[ 1,1 ],
[ 2,1 ],
[ 3,1 ],
];

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
2 [报告]
发表于 2013-12-26 11:24 |只看该作者
  1. @$ref_to_A = sort {$b->[1] <=> $a->[1] or $a->[0] <=> $b->[0]}@$ref_to_A;
复制代码

论坛徽章:
1
2015亚冠之萨济拖拉机
日期:2015-09-22 10:59:00
3 [报告]
发表于 2013-12-26 11:31 |只看该作者
怎么用啊,可以写段具体的代码吗?
回复 2# xiumu2280


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
4 [报告]
发表于 2013-12-26 11:32 |只看该作者
本帖最后由 xiumu2280 于 2013-12-26 11:33 编辑
  1. my $ref_to_A = [
  2. [ 2,1 ],
  3. [ 2,2 ],
  4. [ 2,3 ],
  5. [ 1,3 ],
  6. [ 1,2 ],
  7. [ 1,1 ],
  8. [ 3,2 ],
  9. [ 3,1 ],
  10. [ 3,3 ],
  11. ];
  12. @$ref_to_A = sort {$b->[1] <=> $a->[1] or $a->[0] <=> $b->[0]}@$ref_to_A;
  13. print "@$_\n" for @$ref_to_A;
复制代码
就是这样sort啊····你可以看看sort的perldoc

论坛徽章:
1
2015亚冠之萨济拖拉机
日期:2015-09-22 10:59:00
5 [报告]
发表于 2013-12-26 11:38 |只看该作者
@$ref_to_A = sort {$b->[1] <=> $a->[1] or $a->[0] <=> $b->[0]}@$ref_to_A;非常感谢,这句该怎么理解呢?
回复 4# xiumu2280


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
6 [报告]
发表于 2013-12-26 12:36 |只看该作者
$b->[1] <=> $a->[1] 先按二维数组里的[1]按数字顺序反向排序。再按$a->[0] <=> $b->[0]中[0]数字顺序正向排序回复 5# Tonyish


   

论坛徽章:
0
7 [报告]
发表于 2013-12-26 13:16 |只看该作者
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;

  4. my $ref_to_A = [
  5. [ 2,1 ],
  6. [ 2,2 ],
  7. [ 2,3 ],
  8. [ 1,3 ],
  9. [ 1,2 ],
  10. [ 1,1 ],
  11. [ 3,2 ],
  12. [ 3,1 ],
  13. [ 3,3 ],
  14. ];

  15. my @new1 =  map{ [ $_->[0], $_->[1] ] }
  16.            sort{ $a->[0] <=> $b->[0] }
  17.            map{ [ $_->[0], $_->[1] ] } @$ref_to_A;

  18. my @new2 =  map{ [ $_->[0], $_->[1] ] }
  19.            sort{ $b->[1] <=> $a->[1] }
  20.            map{ [ $_->[0], $_->[1] ] } @new1;

  21. print map{ "$_->[0],$_->[1]\n" } @new2;
复制代码

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
8 [报告]
发表于 2013-12-26 15:55 |只看该作者
好厉害的小伙伴们, 这个必须赞一个

回复 4# xiumu2280


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP