Sai*_*mma 0 arrays perl logic compare
我想将一个字符串数组与另一个字符串数组进行比较;如果匹配,则打印匹配。
例子:
@array = ("R-ID 1.0001", "RA-ID 61.02154", "TCA-ID 49.021456","RCID 61.02154","RB-ID 61.02154");
@var = ("TCA-ID 49", "R-ID 1");
for (my $x = 0; $x <= 4; $x++)
{
$array[$x] =~ /(.+?)\./;
if( ($var[0] eq $1) or ($var[1] eq $1) )
{
print "\n deleted rows are :@array\n";
}
else
{
print "printed rows are : @array \n";
push(@Matrix, \@array);
}
Run Code Online (Sandbox Code Playgroud)
然后我需要@var与@array;进行比较 如果匹配,则打印匹配的模式。
这里,整个逻辑位于一个 hiartical for 循环中,它在每次迭代中给出一个新的 @array。所以每次执行这个逻辑时@array都有不同的字符串。
然后附带@var,它是用户输入字段,这个@var可以是任意大小。因此,为了根据这些约束运行逻辑,例如,当用户输入 @var 大小为 3 时,我需要迭代 if 循环内的条件。
因此,目标是使用上述逻辑来匹配和删除用户输入字符串。但不幸的是,逻辑不起作用。您能帮我解决这个问题吗?
内置grep关键字是一个很好的起点。
my $count = grep { $_ eq $var } @array;
Run Code Online (Sandbox Code Playgroud)
$_这将返回数组中等于 ( )的项目 ( eq)的计数$var。
如果您需要不区分大小写的匹配,您可以使用lc(或在 Perl 5.16 或更高版本中,fc)来执行此操作:
my $count = grep { lc($_) eq lc($var) } @array;
Run Code Online (Sandbox Code Playgroud)
现在,它的一个缺点grep是它正在计算匹配数。因此,如果找到第一个匹配项,它将继续下去,直到数组末尾。您似乎不想这样做,而只是想知道数组中的任何项目是否匹配,在这种情况下,如果它是一个包含数千个元素的大数组,继续下去可能会比您需要的慢。
因此,请使用anyList::Util 模块(与 Perl 捆绑在一起)。
use List::Util qw( any );
my $matched = any { $_ eq $var } @array;
Run Code Online (Sandbox Code Playgroud)
一旦找到第一个匹配元素,它就会匹配,并跳过搜索数组的其余部分。
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |