【问题标题】:Perl algorithm compare arraysPerl 算法比较数组
【发布时间】:2015-02-05 22:41:28
【问题描述】:

我对 Perl 编程中的算法有疑问,我不知道如何管理。

我在一个包含一些列和许多行的文本文件中有一个数据库。我已经可以读取所有变量并将其保存到多维数组中。我们假设它是这样的

 1.  Jack  A  math
 2.  John  A+ math
 3.  Jack  B  sports
 4. .
 5. .
 6. .

可以看到有四列(id name 等级课程)

现在我的问题是,我希望将所有具有相同名称的行导出到一个新的文本文件中。我已经有了算法的想法,我可以检查第一行并将其与所有其他行进行比较,如果存在相似性行,则导出它们,然后检查第二行并将其与下面的所有其他行进行比较,如果存在相似性导出它等等。

这是我想到的正确算法还是有其他算法可以做到这一点?

如果您能给我一个代码示例或我可以采取的任何其他进一步的步骤,我将不胜感激。

我想要这个结果作为我的示例

1. Jack A for math, B in sports
2. John A+ for math 

【问题讨论】:

  • 你不想要一个数组,你想要一个哈希。哈希是键值对。等真的很好还是这样的问题。

标签: perl


【解决方案1】:

我怀疑这是作业,所以我会给你一个解决方案,你可以用它作为提示来编写你自己的答案。如果您对它的理解有问题,请询问。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多