【发布时间】:2022-02-10 03:31:20
【问题描述】:
我有 10 个数组,每个数组都包含相似类型的值。我想从每个数组中捕获这些值的子集(仅捕获数字),然后将其与另一个数组中的子集进行比较。而且,我只想在值中没有 dash 时才从两个数组中捕获值的数字部分(即 2EF = 捕获'2',但如果 45F- 则不捕获任何东西,移动到下一个值)。
_ 数据 _
@array1 = (-, 1EF, 2DG, 3GF, 4F-, -, ....99GY);
@array2 = (-, 1EF, 2DF, 3SD, 4DE, -, ....99HK);
可以同时比较 10 个数组中的任意两个数组。所以,我将它们存储在一个数组中,'@allarrays',然后循环比较。在下面的脚本中,我能够完美地捕获第一个数组的数字,但我无法比较第二个数组的数字。 $digit1(对应于@array1)的值被复制到$digit2(对应于@array2)。怎么了?
sub compareArrays {
my @array = @_; # passes an array @allarray which has @array1, @array2 ...@array10
for (my $p=0; $p<10; $p++) { # since total number of arrays is 10
for (my $r=$p + 1; $r<10; $r++) { # to compare arrays
for (my $q=0; $q<$colsInArray; $q++) {
my $string1 = $array[$p][$q];
my $string2 = $array[$r][$q];
# array1
$string1 =~ /(\d+)[A-Z]+/;
my $digit1 = $1; # capture digit part of array value
print "array1: $digit1\n"; # works fine, prints captured $digit1
# array2
$string2 =~ /(\d+)[A-Z]+/;
my $digit2 = $1;
print "array2: $digit2\n"; # does not capture the value in $digit2, instead copies $digit1
if ($digit1 == $digit2) {
print "$digit1: $digit2\n";
}
}
}
}
}
我将 compareArrays 称为:
&compareArrays(@allarrays);
【问题讨论】:
-
@allarrays 设置为什么?由于您发布的内容基本上可以正常工作,因此您需要发布一个完整的可运行示例,包括初始化数组,以便我们查看哪些部分无法正常工作。