免费注册 查看新帖 |

Chinaunix

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

对数组排序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-01 12:52 |只看该作者 |倒序浏览
    我想对数组排序,然后打印数组排序后的下标。不知道大家有没有好办法,我想用哈希,但是感觉不直接。
   
    my @a=(5,3,6,7,8,9);
    从大到小排序结果(下标):
   
     5
     4
     3
     2
     0
     1

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2012-11-01 13:02 |只看该作者
把数据和它原位的位置打包然后排序

my @a2 = map [$a[$_], $_], 0 .. @a-1;
my @result = reverse sort {$a->[0] <=> $b->[0]} @a2; # 排序
再取出原来的下标
say for map $_->[1], @result;

写成一行就是
@rank = map $_->[1], reverse sort {$a->[0] <=> $b->[0]} map [$a[$_], $_], 0 .. @a-1;

论坛徽章:
7
巳蛇
日期:2013-11-28 09:22:59天秤座
日期:2014-10-25 15:40:452015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之德黑兰石油
日期:2015-07-15 08:46:452015亚冠之平阳省
日期:2015-11-08 16:27:53白银圣斗士
日期:2015-11-14 09:58:12
3 [报告]
发表于 2012-11-01 13:35 |只看该作者
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use 5.014;

  4. my @a=(5,3,6,7,8,9);
  5. my %hash;
  6. while (my ($index,$value)=each @a){
  7.         $hash{$index}=$value;
  8. }
  9. my @index=sort {$hash{$b}<=>$hash{$a}} keys %hash;

  10. print "@index\n";
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-11-01 14:30 |只看该作者
  1. my @array = (5,3,6,7,8,9);
  2. my @index = sort { $array[$b] <=> $array[$a] } 0..$#array;
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-11-01 15:09 |只看该作者
回复 4# kk861123


    这样子的答案喜欢,谢谢,看起来很爽。

论坛徽章:
0
6 [报告]
发表于 2012-11-01 15:09 |只看该作者
回复 2# zhlong8


    谢谢版主,学习了,

论坛徽章:
0
7
发表于 2012-11-01 15:10
回复 3# b114213903


    谢谢,辛苦了

论坛徽章:
0
8 [报告]
发表于 2012-11-01 15:27 |只看该作者
本帖最后由 wsxedcer 于 2012-11-01 15:29 编辑

回复 3# b114213903


    我艹,没仔细看要求,是下标

论坛徽章:
7
巳蛇
日期:2013-11-28 09:22:59天秤座
日期:2014-10-25 15:40:452015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之德黑兰石油
日期:2015-07-15 08:46:452015亚冠之平阳省
日期:2015-11-08 16:27:53白银圣斗士
日期:2015-11-14 09:58:12
9 [报告]
发表于 2012-11-02 12:54 |只看该作者
回复 8# wsxedcer

那个做的就是下标啊?下面不是有结果的截图么?
你是怎么了?


   

论坛徽章:
0
10 [报告]
发表于 2012-11-02 20:49 |只看该作者
试一下

  1. my @A = (5,3,6,7,8,9);

  2. my @B =  map {$_->[1]}
  3.                 sort{$b->[0] <=> $a->[0]}
  4.                 map {[$A[$_],$_]}  (0..$#A);

  5. print "@B\n";
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP