首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Perl中,如何使用出现在第一个冒号(:)之前的数字对记录进行排序?

在Perl中,如何使用出现在第一个冒号(:)之前的数字对记录进行排序?
EN

Stack Overflow用户
提问于 2011-11-14 08:22:15
回答 5查看 188关注 0票数 2

我在Perl中有以下数据序列:

代码语言:javascript
运行
复制
143:0.0209090909090909 
270:0.0909090909090909 
32:0.0779090909090909 
326:0.3009090909090909

请问,我如何根据冒号之前的数字对它们进行排序,以将其作为我的输出?

代码语言:javascript
运行
复制
32:0.0779090909090909
143:0.0209090909090909
270:0.0909090909090909  
326:0.3009090909090909
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-14 09:05:44

那里有冒号并不重要。

Perl将字符串转换为数字的规则将做正确的事情:

代码语言:javascript
运行
复制
#!/usr/bin/perl
use warnings;
use strict;

my @nums = qw(
    143:0.0209090909090909 
    270:0.0909090909090909 
    32:0.0779090909090909 
    326:0.3009090909090909
);

{ no warnings 'numeric';
    @nums = sort {$a <=> $b} @nums;
}

print "$_\n" for @nums;
票数 7
EN

Stack Overflow用户

发布于 2011-11-14 08:36:11

可以使用内置的sort函数:

程序

代码语言:javascript
运行
复制
#!/usr/bin/env perl

use strict;
use warnings;

my @data = qw(
  143:0.0209090909090909
  270:0.0909090909090909
  32:0.0779090909090909
  326:0.3009090909090909
);

my $match = qr/^(\d+):/;
@data = sort { ( $a =~ $match )[0] <=> ( $b =~ $match )[0] } @data;

print join( "\n", @data ), "\n";

输出

代码语言:javascript
运行
复制
32:0.0779090909090909
143:0.0209090909090909
270:0.0909090909090909
326:0.3009090909090909
票数 2
EN

Stack Overflow用户

发布于 2011-11-14 08:26:56

我会简单地使用

代码语言:javascript
运行
复制
sort -n < input.txt

否则:

代码语言:javascript
运行
复制
use strict;
use warnings;

my @lines = (<>); 
print for sort { 
    my @aa = split(/:/, $a); 
    my @bb = split(/:/, $b); 
    1*$aa[0] <=> 1*$bb[0] 
} @lines;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8115955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档