首页 > 解决方案 > 在 Perl 的数组数组中删除 undef

问题描述

我正在尝试从具有 undef 值的数组数组中删除元素。

我希望输出为:

@list = [
      [
        2,
        ""
      ],
      [
        4,
        ""
      ],
      [
        6,
        ""
      ],
      [
        8,
        ""
      ],
      [
        10,
        ""
      ],
    ];

这就是我一直试图从数组中删除 undef 的内容。我正在从数组中提取定义的元素,但它不起作用

use Data::Dumper;

my @list = [
  [
    undef,
    ""
  ],
  [
    2,
    ""
  ],
  [
    4,
    ""
  ],
  [
    6,
    ""
  ],
  [
    8,
    ""
  ],
  [
    10,
    ""
  ],
];

@list = grep defined, @list;

print Dumper(\@list);

有人可以帮忙吗?

提前致谢

标签: arraysperlarraylistmultidimensional-array

解决方案


人们经常在 Perl 中混淆列表和数组。所以调用数组变量@list是一个非常糟糕的主意:-)

正如我在评论中提到的,您似乎对如何在 Perl 中填充数组感到困惑。您可以使用列表填充它:

my @array = ( ... ); # Lists use parentheses

或者您创建一个匿名数组并将对该数组的引用存储在标量变量中:

my $array_ref = [ ... ]; # Anon array uses square brackets

接下来,您的数组不包含undef元素。数组中的每个元素都是对二元素数组的引用。在其中一个二级数​​组中,第一个元素是undef. 您使用grep过滤数组是正确的,但是您需要查看二级数组才能执行您想要的操作。

所以代码看起来像这样:

my @array = ( ... );

@array = grep { defined $_->[0] } @array;

请注意,我已切换到grep. 这是最常用的版本,最好使用该语法。


推荐阅读