簡體   English   中英

在 perl 中將數組的相似元素組合在一起以立即在 foreach 中使用

[英]Group similar element of array together to use in foreach at once in perl

我有一個數組,其中包含一些元素,其中某些元素在某些條件下是相似的(如果我們從數組元素中檢測到“ np ”,則可以識別相似元素)。 我想在使用 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 說np )。 在這種情況下,可以做

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM