【发布时间】:2018-10-23 13:19:53
【问题描述】:
代码在循环中的某处变得混乱!请帮我解决。
详情
使用引用元素复制和/或重新分配多维数组中的大部分数组元素。
File-1:数组索引和元素列表,需要在原始数组中维护。
File-2:需要用上述信息重写的原始多维数组。除上述元素外,其余所有元素都必须重新分配。
File-3:预期输出(重新分配的数组元素)
注意:除了来自 file1 的数组索引外,其余所有索引都将替换为参考线。参考线通常出现在阵列的第一行。
在修改后的数组中,不需要参考线。
文件-1:
ID1 2 E1,E4
ID2 5 E6,E7,E9
ID3 1 E3
文件 2:
ID1.txt
Ref K L M N O P A B C D
E1 S H G U S K R E K K
E2 S L G N O P A B C D
E3 S L G N O P A B C D
E4 U L G G O P A B C D
E5 U L M G O P A J C D
E6 U L M G O P A J C D
E7 U L M G O P A J C D
E8 U L M G O P A J C D
E9 S L M N O P A J C D
E10 S L M N O P A J C D
.
.
.
文件 3:预期输出
new_ID1.txt
E1 K L G N O P A B C D
E2 K L M N O P A B C D
E3 K L M N O P A B C D
E4 K L G N O P A B C D
E5 K L M N O P A B C D
E6 K L M N O P A B C D
E7 K L M N O P A B C D
E8 K L M N O P A B C D
E9 K L M N O P A B C D
E10 K L M N O P A B C D
.
.
.
在预期的输出 (new_ID1.txt) 中,“E1”和“E4”的数组的第二个索引是从原始数组中维护的。其他所有内容都替换为“E2,E3,E5...”中的参考线。
代码
#!/usr/bin/perl
use strict;
use warnings;
my %HoHoA = ();
open(IN,"ids.txt");
my @ids = <IN>; chomp @ids; close IN;
open(IN2,"indices_and_values.txt");
while(my $l = <IN2>)
{
chomp $l;
my @tmp = split "\t", $l;
my $lid = $tmp[0];
my $pos = $tmp[1];
my @gps = @tmp[2..$#tmp];
foreach my $g (@gps)
{
push @{$HoHoA{$lid}{$g}}, $pos;
}
}
close IN2;
foreach my $outer (sort keys %HoHoA)
{
open(IN3,"$outer.txt");
my @rS = <IN3>; chomp @rS; close IN3;
my @orgArr = (); my @refArr = (); my @newArr = ();
foreach my $unk (@rS)
{
@orgArr = split "\t", $unk;
if($unk =~ /^Ref/)
{
@refArr = split "\t", $unk;
next;
}
foreach my $inner (sort keys %{$HoHoA{$outer}})
{
if($inner =~ /^$orgArr[0]/)
{
foreach my $ele (sort {$a <=> $b} @{$HoHoA{$outer}{$inner}})
{
$refArr[$ele] = $orgArr[$ele];
}
}
#else
#{
#}
}
print ">$orgArr[0]\t";
print join("\t",@refArr[1..$#refArr]);
print "\n";
}
@rS = ();
print "\n";
}
【问题讨论】:
-
我不明白。它说 E1 被保留(至少是“第二个索引”...)但是 ID1.txt 文件中的 E1 行是
S H G U...而在所需的输出文件中是K L G N...-- - 完全不同。 “数组 E1”是什么意思——以 E1 开头的行? -
@zdim 只有文件 1 中的给定数组索引必须保留,而不是整个元素。例如,应保持 E1[2]。 E1[2] 是“G”。其他所有元素都应替换为 Ref 元素(数组的第一行)。所以它是 K L G N O P A B C D。我(假设)提到了数组 E1、E2 等,因为多行(行/列)。了解另一种方式也会有所帮助。 File-1格式如下,“id index_value数组”
-
啊,谢谢您——是的,它在问题中说明了所有内容。如果我仍然误解了什么,请告诉我(见答案)
标签: perl multidimensional-array replicate