Perl 算法比较数组
Perl algorithm compare arrays
我在 Perl 编程中对我的算法有疑问,我不知道如何处理。
我在文本文件中有一个数据库,其中包含一些列和许多行。我已经可以读取所有变量并将其保存到多维数组中。让我们假设它是这样的
1. Jack A math
2. John A+ math
3. Jack B sports
4. .
5. .
6. .
可以看到有四列(id名成绩课)
现在我的问题是,我希望将所有具有相同名称的行导出到一个新的文本文件中。我已经有了算法想法,我可以检查第一行并将其与所有其他行进行比较,如果存在相似性,则导出它们,然后检查第二行并将其与下面的所有其他行进行比较,如果存在相似性,则导出等等。
这是我想到的正确算法还是有其他算法可以做到这一点?
如果您能给我一个代码示例或我可以采取的任何其他进一步步骤,我将不胜感激。
我的例子想要这个结果
1. Jack A for math, B in sports
2. John A+ for math
我怀疑这是作业,所以我会给你一个解决方案,你可以作为提示来写自己的答案。如果您对它的理解有问题,请询问。
use strict;
use warnings;
my %data;
while (<DATA>) {
my ($id, $name, $grade, $lesson) = split;
push @{ $data{$name} }, [ $grade, $lesson ];
}
my $n;
for my $name (sort keys %data) {
my $grades = $data{$name};
printf "%2d. %s %s\n", ++$n, $name, join ', ', map "$_->[0] in $_->[1]", @$grades;
}
__DATA__
1. Jack A math
2. John A+ math
3. Jack B sports
输出
1. Jack A in math, B in sports
2. John A+ in math
我在 Perl 编程中对我的算法有疑问,我不知道如何处理。
我在文本文件中有一个数据库,其中包含一些列和许多行。我已经可以读取所有变量并将其保存到多维数组中。让我们假设它是这样的
1. Jack A math
2. John A+ math
3. Jack B sports
4. .
5. .
6. .
可以看到有四列(id名成绩课)
现在我的问题是,我希望将所有具有相同名称的行导出到一个新的文本文件中。我已经有了算法想法,我可以检查第一行并将其与所有其他行进行比较,如果存在相似性,则导出它们,然后检查第二行并将其与下面的所有其他行进行比较,如果存在相似性,则导出等等。
这是我想到的正确算法还是有其他算法可以做到这一点?
如果您能给我一个代码示例或我可以采取的任何其他进一步步骤,我将不胜感激。
我的例子想要这个结果
1. Jack A for math, B in sports
2. John A+ for math
我怀疑这是作业,所以我会给你一个解决方案,你可以作为提示来写自己的答案。如果您对它的理解有问题,请询问。
use strict;
use warnings;
my %data;
while (<DATA>) {
my ($id, $name, $grade, $lesson) = split;
push @{ $data{$name} }, [ $grade, $lesson ];
}
my $n;
for my $name (sort keys %data) {
my $grades = $data{$name};
printf "%2d. %s %s\n", ++$n, $name, join ', ', map "$_->[0] in $_->[1]", @$grades;
}
__DATA__
1. Jack A math
2. John A+ math
3. Jack B sports
输出
1. Jack A in math, B in sports
2. John A+ in math