列出数组中具有公共元素的数组

时间:2014-12-17 05:53:07

标签: arrays perl

#!/usr/bin/perl

use strict;
use warnings;

my @array = ( ['John', 'Apple', 6],
              ['Adam', 'Banana', 7],
              ['Cass', 'Orange', 7],
              ['Brad', 'Lemon', 6],
              ['Lisa', 'Grape', 5] );

列是名称,水果和年龄。如何使用grep或任何其他命令提取具有相同年龄的条目,并将其推入另一个数组?例如,如果我想提取年龄为7的条目,结果数组将是这样的:

@age7 = ( ['Adam', 'Banana', 7],
          ['Cass', 'Orange', 7] );

如果我的任务有几千个条目(数组中的数组),我该如何实现这个?

1 个答案:

答案 0 :(得分:0)

一种方法是使用哈希,如下所示:

use strict;
use warnings;
use Data::Dumper;

my @array = ( ['John', 'Apple', 6],
              ['Adam', 'Banana', 7],
              ['Cass', 'Orange', 7],
              ['Brad', 'Lemon', 6],
              ['Lisa', 'Grape', 5] );

my %hash;
for (@array) {
    push @{ $hash{$_->[2]} }, $_;
}
print Dumper $hash{7};

然而,这将区分77.0之类的数字,因为散列键是字符串。如果这是一个问题,您可以始终循环键并使用比较,例如if ($key >= 7.1 and $key <= 7)