Arrays 在Perl中排序数组失败
我练习将成员插入数组并对其排序,然后打印出成员列表Arrays 在Perl中排序数组失败,arrays,perl,sorting,Arrays,Perl,Sorting,我练习将成员插入数组并对其排序,然后打印出成员列表 use strict; use warnings; use Data::Dumper; my $fh = \*DATA; while(my $line = <$fh>) { chomp($line); $line =~ s/\s+//g; push(my @ArrLines, $line); my @SortedArr = sort @ArrLines;
use strict;
use warnings;
use Data::Dumper;
my $fh = \*DATA;
while(my $line = <$fh>) {
chomp($line);
$line =~ s/\s+//g;
push(my @ArrLines, $line);
my @SortedArr = sort @ArrLines;
foreach my $val (@SortedArr) {
print "$val\n";
}
}
__DATA__
A2B12,A8B15
A3B27
A5B14,A8B15,A5B18
注意:只保留一个重复项,如A8B15
谢谢你的意见和建议。 < P>阅读后排序,不要在中间排序。< /P>
push(my@ArrLines
每次都创建一个新的@ArrLines。在循环外声明它
你不会在任何地方用逗号分开,但似乎需要这样做
消除重复数据的最简单方法是使用哈希而不是数组
因此:
使用严格;
使用警告;
使用数据::转储程序;
my$fh=\*数据;
我的%行;
while(我的$line=){
chomp($line);
$lines{$\}++用于拆分/,/,$line;
}
my@sorted_array=排序键%行;
打印转储程序\@排序数组;
> > p>读后排序,不要在中间排序。
push(my@ArrLines
每次都创建一个新的@ArrLines。在循环外声明它
你不会在任何地方用逗号分开,但似乎需要这样做
消除重复数据的最简单方法是使用哈希而不是数组
因此:
使用严格;
使用警告;
使用数据::转储程序;
my$fh=\*数据;
我的%行;
while(我的$line=){
chomp($line);
$lines{$\}++用于拆分/,/,$line;
}
my@sorted_array=排序键%行;
打印转储程序\@排序数组;
有几个问题:
您需要在读取行的循环上方声明my@ArrLines;
。当前,在读取每一行之后,它将被重新声明(因此设置为空)
您需要在读取行的循环之后执行排序和输出
此外,您没有使用逗号分割输入,从“预期输出”判断,您应该这样做。您可以使用split()
函数进行此操作
此外,您提到您希望重复的项目只出现一次,但您没有采取任何措施来实现这一点。一旦对项目进行了排序,就可以检查当前项目是否与前一个项目相同,如果不相同,就只打印它。有几个问题:
您需要在读取行的循环上方声明my@ArrLines;
。当前,在读取每一行之后,它将被重新声明(因此设置为空)
您需要在读取行的循环之后执行排序和输出
此外,您没有使用逗号分割输入,从“预期输出”判断,您应该这样做。您可以使用split()
函数进行此操作
此外,您提到您希望重复的项目只出现一次,但您没有采取任何措施来实现这一点。一旦对项目进行排序,就可以检查当前项目是否与前一个项目相同,如果不相同,则只打印它。啊,我查看了我的参考书。发现哈希值可以是1。键和值;2.a一桶数据。我认为我的案例适合一桶数据。一开始,我不想使用哈希,因为我只记得哈希是一种包含键和值的数据结构。谢谢。啊,我查阅了我的参考书。发现哈希可以是1。键和值;2。一桶数据。我认为我的案例适合一桶数据ta.一开始,我不想使用哈希,因为我只记得哈希是一种包含键和值的数据结构。谢谢。
A2B12
A3B27
A5B14
A5B18
A8B15
use strict;
use warnings;
use Data::Dumper;
my $fh = \*DATA;
my %lines;
while (my $line = <$fh>) {
chomp($line);
$lines{$_}++ for split /,/, $line;
}
my @sorted_array = sort keys %lines;
print Dumper \@sorted_array;