免费注册 查看新帖 |

Chinaunix

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

求教:如何实现对文本中字符串中的数字进行排序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-19 15:23 |只看该作者 |倒序浏览
如题,例如原始文本数据为:
         delta_9
              delta_1
              delta_5
              delta_0
              delta_3
              delta_8
              delta_2
              delta_1

排序完之后的数据应为:
delta_0
delta_1
delta_1
delta_2
delta_3
delta_5
delta_8
delta_9

不知道怎么实现,sort也不大会用,难道有别的特殊函数吗?望版上大侠不吝赐教啊,不胜感激!

论坛徽章:
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-12-19 15:29 |只看该作者
use Sort::Naturally;

@result = nsort qw( delta_9
              delta_1
              delta_5
              delta_0
              delta_3
              delta_8
              delta_2
              delta_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
3 [报告]
发表于 2012-12-19 15:30 |只看该作者
如果数字部分只有一位的话直接用 sort 就可以了

论坛徽章:
0
4 [报告]
发表于 2012-12-19 15:40 |只看该作者
感谢版主出手相救啊,数字部分是只有一位,可是用sort怎么能实现呢,
sort会先把第一个字符进行排序的吧,我是想让它按照最后的数字进行
排序啊,版主能否再指点一二?(因为我的perl里没有Sort::Naturally
这个模块,我也没有权限来安装它。。。)


   

论坛徽章:
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
5 [报告]
发表于 2012-12-19 15:47 |只看该作者
回复 4# frankhyk


    sort 默认是字符串排序比如 'aa' < 'ab', 'aaa' < 'aa' 遇到相等的字符会比较下一个直到第一个不一样的字符。你这里前面不都一样吗有什么关系

论坛徽章:
0
6 [报告]
发表于 2012-12-19 15:50 |只看该作者
哦,对不起,我举的这个例子不好,实际我的文本中,数字前面的字符串也是不相同的。
所以我才觉得用sort好像行不通.

   

论坛徽章:
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
7 [报告]
发表于 2012-12-19 16:01 |只看该作者
回复 6# frankhyk


    my @data = qw(a1 b4 c123 d328 z32 m10);
    #提出数字部分
    my @data_with_num_part;
    for (@data) {
        die "$_ don't have num part" unless $_ =~ /(\d+)/;
        push @data_with_num_part, [$_, $1]; #将文本和它的数字部分打包成一个数组
    }

    # 对数字部分排序,然后用 map 取出原文本
    my @sorted = map $_->[0] , sort { $a->[1] <=> $b->[1]} @data_with_num_part;

论坛徽章:
0
8 [报告]
发表于 2012-12-19 16:14 |只看该作者
回复 7# zhlong8


    多谢版主哈,达到了我想要的效果,贵版真是个好地方,看来以后得常来逛。

论坛徽章:
6
卯兔
日期:2013-11-26 14:52:02丑牛
日期:2014-02-19 18:01:25卯兔
日期:2014-05-20 20:34:06白羊座
日期:2014-05-23 13:39:232015亚冠之大阪钢巴
日期:2015-08-07 20:57:582015亚冠之大阪钢巴
日期:2015-09-02 14:09:09
9 [报告]
发表于 2012-12-19 16:29 |只看该作者
  1. use v5.016;
  2. use Modern::Perl;
  3. my @data=qw(delta_9 delta_1 delta_5 delta_0 delta_3 delta_8 delta_2 delta_1);
  4. my @result=
  5. map $_->[0],
  6. sort{$a->[1]<=>$b->[1]}
  7. map{[$_,/(\d+)/]}
  8. @data;
  9. say "@result";
复制代码
回复 1# frankhyk


   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
10 [报告]
发表于 2012-12-19 20:14 |只看该作者
  1. map{print "$_->[0]\n"}sort{$a->[1]<=>$b->[1]}map{/([^\d]+)(\d+)/;[$_,$2]}@data
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP