arrays - 在 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);
有人可以帮忙吗?
提前致谢
解决方案
人们经常在 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
. 这是最常用的版本,最好使用该语法。
推荐阅读
- bash - 如何停止 vsftpd 服务器
- regex - Ruby 路由 URI 正则表达式
- javascript - D365/JavaScript 问题:需要帮助附加 OnSave 事件以不允许用户保存表单
- ios - Xcode 11.4 和 iOS 13.4 打破了 Project 中的 Objective-C 类别
- python - 使用 python 的电报机器人 - telegram.error.BadRequest:消息未修改:
- javascript - 伪造预加载器屏幕
- python-3.x - Python:如何在每次迭代中返回列表的所有元素,当前元素除外
- reactjs - (反应)无法正确显示组件中的数据
- javascript - 使用 youtube-dl 制作 chrome 扩展显示错误“未捕获的 ReferenceError:未定义要求”
- c++ - 如何从用户(这是一个列表)获取输入并将值存储在 C++ 中的数组中?