Perl - 将grep应用于AoA并从已返回的数组中获取特定元素

时间:2014-10-02 20:41:22

标签: arrays perl multidimensional-array grep

我有2D数组,我想按特定索引过滤但返回另一个索引。我试过这个:

print (grep {$_->[0] eq "defuser"} @passwd_file_AoA)[2];

但是给了我语法错误。

编辑:

从这个数组

@AoA = ([1,"a","b"],[2,"c","d"]);

我想得到 “一”

我根据贝娄建议尝试了以下但是给我回复1

use Data::Dumper; 
@AoA = ([1,"a","b"],[2,"c","d"]);
$a = map { $_->[1] } grep { $_->[0] == 1 } @AoA;
print Dumper $a

1 个答案:

答案 0 :(得分:1)

如果您想使用数组数组中的值创建全新数组,可以使用mapgrep

my @new_arr = map { $_->[2] } grep { $_->[0] eq "defuser" } @AoA;

如果要打印并制作新阵列:

my @new_arr = map { say $_->[2]; $_->[2] } grep { $_->[0] eq "defuser" } @AoA;

(使用say,需要perl 5.10或更高版本以及use feature ':5.10',但每次打印到STDERR时都需要输入\n

正如ThisSuitIsBlack所说,打印可以用

完成
for my $a (@AoA) {
    say $_->[2] if $_->[0] eq 'defuser';
}