[英]Perl multidimensional array search
我是perl的新手,如果我的问题感到困惑,请原谅。
我有一个多维数组,具有4列和许多行。
需要搜索每行的第一个元素是否与变量匹配。
如果匹配,则在第三列中串联另一个变量。 如果不匹配,则推送到同一数组。
例如:
从其他循环/逻辑中获取4个不同的变量。
$var1
, $var2
, $var3
, $var3
并将它们推送到临时数组。
push @local,$var1,$var2,$var3,$var4;
在将它们推入主数组之前,我需要检查@new array
的column1中是否已经存在var1。 如果存在,请连接同一行的第三列。
如果var1在@new array
column1中不存在,则将@local2
推送到@new
。
如果有人知道我该怎么做,请发表如何做,将不胜感激。
谢谢 :)
描述有点含糊,但这可能会做您想要的。 您需要的部分在“ CODE”标签之间。
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use Data::Dumper;
my @new; # Array where data will be stored
# Define test arrays that in turn will populate the four input variables
my @testvariables = (
[qw/a1 a2 a3 a4/],
[qw/b1 b2 b3 b4/],
[qw/v1 v2 v3 v4/],
[qw/c1 c2 c3 c4/],
[qw/v1 v2 vv3 v4/],
[qw/d1 d2 d3 d4/],
[qw/b1 b2 bb3 b4/],
[qw/v1 v2 vvv3 v4/]
);
# Test different values for input varibles
foreach my $row_ref (@testvariables) { # Each round gives us a new ref to an array
my ($var1, $var2, $var3, $var4) = @{$row_ref}; # Update test variables
#-------------CODE--------------
my $updated = undef; # Create/clear flag.
foreach my $row_ref (@new) { # Loop though existing arrays in @new
next unless ${$row_ref}[0] =~ /$var1/; # Skip to next array in @new if $var1 does not match
${$row_ref}[2] .= "_$var3"; # $var1 matched as we got this far. Concat third element
$updated = 1; # Flag that concat was performed
last; # No need to look for more matches in @new.
}
unless ($updated) { # If $var1 was not found in @new, append variables as array to @new.
my @a = ($var1, $var2, $var3, $var4); # Create array
push (@new, \@a); # Add new array to
}
#-------------\CODE-------------
print "-------------\n";
print Dumper \@new;
}
您没有说阵列的组织方式。 如果它是一个行数组,那么map函数就是您想要的工具。 编写适用于单行的代码,然后使用map将其应用于每一行并收集结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.