检查不在数组中的特定值

  • 本文关键字:数组 perl compare
  • 更新时间 :
  • 英文 :


我有一个有两个值的数组,如果输入不在该数组中,则需要执行一些操作。

我试过像

if ($a ne ('value1' || 'value2')
if (($a ne 'value1' ) || ($a ne 'value2' ))

两种方法都不起作用。有人能帮忙吗?

您可以使用List::MoreUtils中的none函数。

如果你真的有一个数组,就像你的主题行所说的那样,那么你的代码看起来就像这个

use List::MoreUtils 'none';
if ( none { $_ eq $a } @array ) {
# Do stuff
}

或者如果你真的有两个常数,那么你可以使用这个

if ( none { $_ eq $a } 'value1', 'value2' ) {
# Do stuff
}

但在这种情况下,我更希望只看到

if ( $a ne 'value1' and $a ne 'value2' ) {
# Do stuff
}

$a不在数组中,如果它与第一个元素不同,也与第二个元素不同。

if ($x ne 'value1' and $x ne 'value2') {

对于任何大小的真实阵列:

if (not grep $_ eq $x, @array) {

(我使用$x而不是$a,因为$a是特殊的——请参阅perlvar。)

if ($a ne ('value1' || 'value2')

评估为

if ($a ne 'value1')

if (($a ne 'value1' ) || ($a ne 'value2' ))

总是正确的。

你可以试试

if ($a ne 'value1' and $a ne 'value2')

if (!grep{$a eq $_} 'value1', 'value2')

基于@Dilbertino(nice nick)的智能匹配解决方案,使用@tobyink的match::simple来缓解智能匹配消失的痛苦(我已经错过了):

use match::simple;
my @array = qw(abcd.txt abcdeff.txt abcdweff.txt abcdefrgt.txt);
my $x="abcd.txt" ;
say "it's there" if ($x |M| @array );

match::simple中的|M|运算符可以替换为match函数,该函数可以稍微加快速度(它是用XS实现的):

use match::simple qw(match);
my @array = qw(abcd.txt abcdeff.txt abcdweff.txt abcdefrgt.txt);
my $x="xyz.txt" ;
if ( match ( $x, @array ) ) {
say "it's there!" ;
}
else {
say "no hay nada";
} 

这很"简单",因为RHS控制行为。使用match::simple,如果您正在与RHS上的数组进行匹配,那么它应该是一个arrayref。

CCD_ 11还具有CCD_。要使用它,你会做:

if ( $x ~~ none (@array) ) { 
say "not here so do stuff ..."; 
}

附录

这里关于Stackdoverlfow的讨论(请参阅:Perl5.20和智能匹配的命运以及何时给出?)和其他地方(c.f.由@ikegami撰写的Perlmonks文章,大约来自Perl-5.18)给出了智能匹配实验的上下文TLDR事情在未来可能会发生变化,但与此同时,您可以返回时间use match::smart qw(match);,使用perl5.8.9再次证明perl永不消亡;它只是回到了自己的生态系统。

在未来,像Smart::Match这样的东西(,即。非核心CPAN模块,而不是概念)可以帮助用辅助函数来增强简化的智能匹配运算符,这些辅助函数读起来像副词和形容词,并且还有一个额外的好处(据我所知),那就是为perl本身澄清/简化事情,因为~~运算符的操作上下文不那么模糊。

我会使用带有regex匹配的grep来执行类似的操作

#!/usr/bin/perl
use warnings;
use strict;
my @array = ('value1','value2');
if(grep(/bvalue1b|bvalue2b/, @array)){
print "Not Foundn";
}
else {
print "do somethingn";
}

您还可以使用智能匹配运算符:

除非($x~~['value1','value2'])

您的变量$a不会被计算为没有[INDEX]索引的array,而是被视为标量。

两值array:

$array[0] = "X"; $array[1] = "Y";

@array = qw/X Y/;

使用if:进行条件检查

if ( $array[0] ne "Your-String" || $array[1] ne "Your-String")

相关内容

  • 没有找到相关文章

最新更新