vik*_*kas 2 arrays perl hash foreach partition
我有一个数组,其中包含某些元素在某些条件下相似的元素(如果我们从数组元素中检测到“ n和p ”,则可以识别相似的元素)。我想在使用 foreach 语句时立即使用这些类似的元素。该数组如下所示
my @array = qw(abc_n abc_p gg_n gg_p munday_n_xy munday_p_xy soc_n soc_p);
Run Code Online (Sandbox Code Playgroud)
数组元素的顺序不必总是这样。
我正在再次编辑这个问题。抱歉,如果我无法正确提出问题。我必须使用上面数组中存在的变量在文件中多次打印字符串。我只是想让你通过下面的代码理解这个问题,下面的代码在任何意义上都是不正确的......我只是用它来让你理解我的问题。
open (FILE, ">" , "test.v");
foreach my $xy (@array){
print FILE "DUF A1 (.pin1($1), .pin2($2));" ; // $1 And $2 is just used to explain that
} // i just want to print abc_n and abc_p in one iteration of foreach loop and followed by other pairs in successive loops respectively
close (FILE);
Run Code Online (Sandbox Code Playgroud)
我要打印的结果如下:
DUF A1 ( .pin1(abc_n), .pin2(abc_p));
DUF A1 ( .pin1(gg_n), .pin2(gg_p));
DUF A1 ( .pin1(munday_n_xy), .pin2(munday_p_xy));
DUF A1 ( .pin1(soc_n), .pin2(soc_p));
Run Code Online (Sandbox Code Playgroud)
使用的脚本语言是 perl 。非常感谢您的帮助。
谢谢。!!
对数据集进行分区完全取决于数据“在某些条件下的相似程度”。
给出的条件是,随着删除_n和_p“相似”元素变得相等(我假设下划线;OP说nand p)。在这种情况下可以做
use warnings;
use strict;
use feature 'say';
my @data = qw(abc_n abc_p gg_n gg_p munday_n_xy munday_p_xy soc_n soc_p);
my %part;
for my $elem (@data) {
push @{ $part{ $elem =~ s/_(?:n|p)//r } }, $elem;
}
say "$_ => @{$part{$_}}" for keys %part;
Run Code Online (Sandbox Code Playgroud)
分组的“相似”字符串作为演示打印,因为我不理解所显示输出的逻辑。请根据需要构建您的输出字符串。
如果就是这样,并且稍后在代码中不再需要处理任何输入,也不需要引用这些共同因素,那么您可能希望将组放在数组中
my @groups = values %part;
Run Code Online (Sandbox Code Playgroud)
如果需要,在写入数组时进行适当的排序sort { ... } values %part。
对于更流畅和不太确定的“相似性”,请尝试“模糊匹配”;这是一个例子。