【发布时间】:2018-06-16 14:58:36
【问题描述】:
我是 Perl 编程的新手。我正在尝试比较两个数组的每个元素。所以这是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use v5.10.1;
my @x = ("tom","john","michell");
my @y = ("tom","john","michell","robert","ricky");
if (@x ~~ @y)
{
say "elements matched";
}
else
{
say "no elements matched";
}
当我运行它时,我得到了输出
no elements matched
所以我想深入比较两个数组元素并且元素不匹配,我想将这些元素存储在一个新数组中。因为我现在可以比较唯一匹配的元素,但无法将其存储在新数组中。
如何将那些不匹配的元素存储在新数组中?
请有人可以帮助我并提供建议。
【问题讨论】:
-
@array1 ~~ @array2检查每个索引是否与另一个数组中的相同索引匹配。正如perlop文档所说,它就像($array1[0] ~~ $array2[0]) && ($array1[1] ~~ $array2[1]) && ...等。最终,您的 else 语句是错误的,应该说“部分或所有元素不匹配”。做你想做的事情的唯一方法是创建一个查找表(哈希)或在另一个数组上迭代一个数组......这两者都已经作为答案提供了。 -
Array::Compare 非常适合您的问题。 search.cpan.org/~davecross/Array-Compare-2.11/lib/Array/… 可以列出不匹配的元素。
-
为了澄清你的问题......你想在两个数组中比较相同的索引吗?那就是...如果
tom在$x[0]中但在$y[1]... 或... 必须tom在$x[0]和$y[0]中,这有关系吗? -
不,我没有比较两个索引..
-
您应该避免使用智能匹配。这是一个实验性功能,有点破损,很可能在 Perl 的未来版本中发生变化