繁体   English   中英

Perl多维数组搜索

[英]Perl multidimensional array search

我是perl的新手,如果我的问题感到困惑,请原谅。

我有一个多维数组,具有4列和许多行。

需要搜索每行的第一个元素是否与变量匹配。

如果匹配,则在第三列中串联另一个变量。 如果不匹配,则推送到同一数组。

例如:

从其他循环/逻辑中获取4个不同的变量。

$var1$var2$var3$var3

并将它们推送到临时数组。

push @local,$var1,$var2,$var3,$var4;

在将它们推入主数组之前,我需要检查@new array的column1中是否已经存在var1。 如果存在,请连接同一行的第三列。

如果var1在@new array column1中不存在,则将@local2推送到@new

如果有人知道我该怎么做,请发表如何做,将不胜感激。

谢谢 :)

描述有点含糊,但这可能会做您想要的。 您需要的部分在“ CODE”标签之间。

#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;
use Data::Dumper;

my @new;    # Array where data will be stored

# Define test arrays that in turn will populate the four input variables
my @testvariables = (
    [qw/a1 a2 a3 a4/],
    [qw/b1 b2 b3 b4/],
    [qw/v1 v2 v3 v4/],
    [qw/c1 c2 c3 c4/],
    [qw/v1 v2 vv3 v4/],
    [qw/d1 d2 d3 d4/],
    [qw/b1 b2 bb3 b4/],
    [qw/v1 v2 vvv3 v4/]
    );

# Test different values for input varibles
foreach my $row_ref (@testvariables) {           # Each round gives us a new ref to an array
    my ($var1, $var2, $var3, $var4) = @{$row_ref};  # Update test variables
#-------------CODE--------------
    my $updated = undef;                            # Create/clear flag.
    foreach my $row_ref (@new) {                    # Loop though existing arrays in @new
        next unless ${$row_ref}[0] =~ /$var1/;     # Skip to next array in @new if $var1 does not match
        ${$row_ref}[2] .= "_$var3";               # $var1 matched as we got this far. Concat third element
        $updated = 1;                               # Flag that concat was performed
        last;                                      # No need to look for more matches in @new.
    }

    unless ($updated) {                         # If $var1 was not found in @new, append variables as array to @new.
        my @a = ($var1, $var2, $var3, $var4);      # Create array
        push (@new, \@a);                           # Add new array to 
    }
#-------------\CODE-------------
    print "-------------\n";
    print Dumper \@new; 
}

您没有说阵列的组织方式。 如果它是一个行数组,那么map函数就是您想要的工具。 编写适用于单行的代码,然后使用map将其应用于每一行并收集结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM