免费注册 查看新帖 |

Chinaunix

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

一个关于数组排序问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-04 17:11 |只看该作者 |倒序浏览
    数组A里面有和多数字,但是我想按照一定的顺序把他排列!这个顺序不完全是从小到大排列的?


     
  $hToolInfo{$tool} = {
size => $size,
type => $size == 2.055 ? '1_spec' : substr($size,-2,1) == 1 ? '3_slot' : $size == 0.59 ? '5_end' : $size == 0.98 ? '6_end' : $size == 3.175 ? '7_end': substr($size,-2,1) == 2 ? '4_kuokong' : substr($size,-2,1) == 3 ? '4_together':  '2_normal',
};

想按照这种方式去排列!

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-08-04 17:13 |只看该作者
自定义 sort 函数的 参数 fun 就可以了吧?
下面的url有说明

http://perldoc.perl.org/functions/sort.html

论坛徽章:
0
3 [报告]
发表于 2014-08-04 17:30 |只看该作者
还是不能理解!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2014-08-04 17:40 |只看该作者
回复 1# zhangfenyun

>>数组A里面有和多数字...

数组A !!??   

论坛徽章:
0
5 [报告]
发表于 2014-08-04 18:23 |只看该作者
@a=(0.25,0.31,0.59,3.175,0.80,0.90,3.23,1.151,1.51,0.9  就是这些数字啊,!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2014-08-04 18:34 |只看该作者
回复 5# zhangfenyun

1. input data
2. procedure rule
3. output data

   

论坛徽章:
0
7 [报告]
发表于 2014-08-04 19:16 |只看该作者
  @a=("600,900,2055,1551,1401,3175,590,980,3203,3503")

  我想变成

  @a=("2055  600   900  1401   1551   3203   3503   590  980   3175")     


排第一个的是 2055

其次是尾数为0的,从小到大

其次是尾数为1的,从小到大

其次是尾数为2的,从小到大

其次是尾数为3的,从小到大

然后是 590

再是 980

最后是3175

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2014-08-04 19:32 |只看该作者
回复 7# zhangfenyun

>>其次是尾数为0的,从小到大

590, 980  <== 尾数为0

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2014-08-04 20:29 |只看该作者
本帖最后由 jason680 于 2014-08-04 20:50 编辑

回复 7# zhangfenyun

Here you are
Note: There are many issues on your procedure rule

$ cat sort_50123x.pl
#!/bin/env perl
use strict;
use warnings;

# There is simple way to create a hash of increase value  by an array
# my @aSort = qw/2055 0 1 2 3 590 980 3175/;
# my %hSort = map{ $aSort[$_] => $_ } 0 .. @aSort-1;

my %hSort = (
  '2055' => 1,
   '0' => 2,
   '1' => 3,
   '2' => 4,
   '3' => 5,

   '590' => 6,
   '980' => 7,
   '3175' => 8

);
my @a = (600,900,2055,1551,1401,3175,590,980,3203,3503);

my @a_sorted = sort by50123 @a;
print "@a_sorted\n";

sub by50123 {
  #my($a, $b) = @_;
  my($sA, $sB) = (9, 9);
  $sA = $hSort{$a%10} if(exists $hSort{$a%10});
  $sB = $hSort{$b%10} if(exists $hSort{$b%10});
  $sA = $hSort{$a} if(exists $hSort{$a});
  $sB = $hSort{$b} if(exists $hSort{$b});

  #print "A=$sA($a), B=$sB($b)\n";
  $sA <=> $sB ||
  $a  <=> $b;
}

$ perl sort_50123x.pl
2055 600 900 1401 1551 3203 3503 590 980 3175


   

论坛徽章:
0
10 [报告]
发表于 2014-08-04 20:34 |只看该作者
大神,我真的很佩服
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP