[英]Group similar element of array together to use in foreach at once in perl
我有一個數組,其中包含一些元素,其中某些元素在某些條件下是相似的(如果我們從數組元素中檢測到“ n和p ”,則可以識別相似元素)。 我想在使用 foreach 語句時立即使用這些相似的元素。 該數組如下所示
my @array = qw(abc_n abc_p gg_n gg_p munday_n_xy munday_p_xy soc_n soc_p);
數組元素的順序不必總是這樣。
我再次編輯這個問題。 抱歉,如果我無法正確提出問題。 我必須使用上述數組中存在的變量在文件中多次打印一個字符串。 我只是想讓你通過下面的代碼理解這個問題,下面的代碼在任何意義上都是不正確的......我只是用它來讓你理解我的問題。
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);
我要打印的結果如下:
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));
使用的腳本語言是 perl。非常感謝您的幫助。
謝謝你。!!
划分數據集完全取決於數據如何“在特定條件下相似”。
給出的條件是,隨着刪除_n
和_p
,“相似”元素變得相等(我假設下划線;OP 說n
和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;
分組的“相似”字符串作為演示打印,因為我不理解所示 output 的邏輯。請根據需要構建您的 output 字符串。
如果就是這樣,以后在代碼中將不再需要處理輸入,也不需要引用這些公因數,那么您可能希望將這些組放在一個數組中
my @groups = values %part;
如果需要在寫入數組時進行合適的排序,請sort {... } values %part
。
要獲得更流暢和更不確定的“相似性”,請嘗試“模糊匹配”; 這是一個例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.