Perl算法比较数组



我对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 %sn", ++$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

最新更新