【问题标题】:List out arrays inside array that have common elements列出数组中具有共同元素的数组
【发布时间】:2014-12-17 14:04:40
【问题描述】:
#!/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] );

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

【问题讨论】:

  • my @age7 = grep $_->[2] ==7, @array;

标签: arrays perl


【解决方案1】:

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

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)

【讨论】:

  • 感谢您的回复!但是,如何删除哈希中的重复数组?例如,当我打印 @{$hash{7}} 时:$VAR1 = [ [ 'Adam', 'Banana', 7 ], [ 'Adam', 'Banana', 7 ], [ 'Cass', 'Orange', 7 ] ]; 如何删除 ['Adam','Banana'] 之一?提前致谢!
  • 重复数据删除也可以通过哈希来完成。但这是另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2016-05-18
  • 2021-09-21
  • 2013-03-13
  • 2013-08-07
  • 1970-01-01
相关资源
最近更新 更多