【问题标题】:Perl: How do I sort each index of an array containing strings of numbersPerl:如何对包含数字字符串的数组的每个索引进行排序
【发布时间】:2013-12-03 21:49:28
【问题描述】:

我有一个从文本文件中读取数值的数组。数组的每个索引都包含一串由空格分隔的随机数字。如何按从低到高的数字顺序对每个数字索引进行排序?这是我目前所拥有的:

print "\n\nNow sorted: \n";
foreach $line(@lines)
{   
chomp($line);
@nums = sort(split (//, $line));
print "$nums"."\n";
}

【问题讨论】:

  • 你能显示示例输入文件内容吗?
  • 除了"$nums" 我认为您想要join(' ', @nums),您认为您当前的代码有什么问题?正如@Guru 所说,你能分享一些意见吗?

标签: arrays perl sorting foreach


【解决方案1】:

也许以下内容会有所帮助:

use strict;
use warnings;

my @lines = <DATA>;

foreach my $line (@lines) {
    my @nums = sort { $a <=> $b } split ' ', $line;
    print "@nums\n";
}

__DATA__
7 2 9 6 4 10
3 6 8 8 10 1
9 4 10 9 2 5
5 0 2 3 7 8

输出:

2 4 6 7 9 10
1 3 6 8 8 10
2 4 5 9 9 10
0 2 3 5 7 8

请注意,以上内容只是稍微修改了您的脚本。请记住始终use strict; use warnings; 还要注意sort 之后的匿名子{ $a &lt;=&gt; $b }。这需要sort 数字。没有它,就会进行字符串比较,第一行printed 将是10 2 4 6 7 9。您似乎还试图在零宽度匹配上使用split,即split //, $line。这个split 的结果是包含该行的单个字符的列表——不是你想要的,因为你需要split 空格。最后,您填充了@nums,然后填充了printed $nums

【讨论】:

  • 如果您只是向split ' ' 输入一行,则无需大吃一惊 - 尾随空格将被忽略
  • @ChristopherFevrier:如果它对您有用,请单击大复选标记将其标记为已接受的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 2018-04-27
  • 1970-01-01
  • 2019-05-26
  • 2011-03-07
相关资源
最近更新 更多