我有2个数组(array1,array2),我试着识别两者中的共同字符串并进行替换,然后打印出array1的内容 .
array2中的元素替换了array1中的一些元素 . 特别是如果有:
array1 = 1.txt
和
array 2 = 1.txt 0.5
array1将是:
array1 = 1.txt 0.5
我试图 Build 这个代码,但它打印出所有元素两次 . 有没有办法避免这个问题?我知道perl中有一个名为“switch”的模块......也许这就是解决方案?我不知道它是如何工作的 .
@array1 = qw(76
38
0.13213855661882
0.264277113237639
1.txt
####
20
10
-0.01235
-0.0247000000000001
10.txt
####
20
10
-0.01235
-0.0247000000000001
2.txt
####
46
14
0.117232213438735
0.385191558441558
10003.txt
####);
@array2 = ("1.txt 0.5", "2.txt 1");
for ($i = 0 ; $i < @array1; $i++){
for ($k =0; $k < @array2; $k++){
if (grep /$array1[$i]/, $array2[$k]){
$array1[$i] =~ s/$array1[$i]/$array2[$k]/;
print $array1[$i]."\n";
}
else {print "RIS ".$array1[$i]."\n";}
}
}
结果:
RIS 76
RIS 76
RIS 38
RIS 38
RIS 0.13213855661882
RIS 0.13213855661882
RIS 0.264277113237639
RIS 0.264277113237639
**1.txt 0.5**
RIS 1.txt 0.5
RIS ####
RIS ####
RIS 20
RIS 20
RIS 10
RIS 10
RIS -0.01235
RIS -0.01235
RIS -0.0247000000000001
RIS -0.0247000000000001
RIS 10.txt
RIS 10.txt
结果预期:
RIS 76
RIS 38
RIS 0.13213855661882
RIS 0.264277113237639
**1.txt 0.5**
RIS 1.txt 0.5
RIS ####
RIS 20
RIS 10
RIS -0.01235
RIS -0.0247000000000001
RIS 10.txt
2 回答
发生这种情况是因为你在@ array2循环中进行打印 . 试试这个:
如果您希望能够查看是否有更改,请尝试以下操作:
您的元素会被打印两次,因为您正在使用for循环来测试是否包含在第二个数组中而不是其他方法 .
我建议将第二个数组转换为键值对的哈希值 . 然后,它是一个简单的哈希包含测试,以查看是否需要替换密钥 .
像下面这样的东西对你有用 . 请注意
use strict;
和use warnings;
的用法 . 它们应该在每个脚本中使用 .输出: