arrays - 在 Perl 中,如何找到数组中最后定义的元素?

标签 arrays perl for-loop conditional-statements defined

使用 Perl,我希望找到数组中定义的最后一个元素。

到目前为止,我有以下内容:

#generating array
$array[100] = (undef);
$array[$columns[1]-1] = $columns [2];

#finding the last element that is defined
for ($i=100; $i>=0; $i--) {
    if (($array[$i] != undef) && (!defined($lastdef)) ){
        $lastdef=$i;
    }
}

我不知道为什么这不起作用。使用 Perl 有任何改进建议吗?

最佳答案

I'm not sure why this is not working. Any suggestions to improve, using Perl?

你不知道它为什么不起作用的原因是你没有使用

use warnings;

如果你这样做了,你会被告知:

Use of uninitialized value in numeric ne (!=) at ...

因为!=numeric inequality operator ,它会将其参数转换为数字。如果您没有打开警告,这会默默地将undef转换为0。不用说,打开警告是一件非常好的事情,这样你就不会犯这样的错误。

就是这一行:

if (($array[$i] != undef) ...

应该是这样

if ((defined($array[$i]) ...

因为它是define函数来检查值的定义性。这是一个奇怪的错误,因为您甚至在同一行上使用相同的函数。

此外,您可以通过执行以下操作来简化此操作

if (defined($array[$i])) {
     $lastdef = $i;
     last;
}

last 将在找到第一个未定义值时结束循环。

您还应该知道,您可以在循环条件上使用非硬编码的最大值:

for (my $i = $#array; $i >= 0; $i--) {

$#array 包含数组中现有的最高索引的编号。

关于arrays - 在 Perl 中,如何找到数组中最后定义的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17899687/

相关文章:

ruby-on-rails - 二维数组前两列上的ruby uniq

r - R与Perl的map和grep等价的是什么?

linux - GDBM文件导入导出

c - 如何在三角形中排列星号

Matlab 如何向量化 double for 循环?嵌套结构数组的设置值非常慢

php - 在 for 循环期间将文件输入 ID 存储在变量内 | PHP

php - 在 Android Studio 中用 Double 解析 JSONArray

javascript - 这是什么: js?

javascript - Underscorejs 对象到集合

regex - 在 PERL 中正确输出特殊字符(unicode)