2011-02-12 141 views
0

我是新來的Perl,如果我的問題混淆,請原諒我。Perl多維數組搜索

我有一個多維數組,它有4列和許多行。

需要搜索每一行的第一個元素是否與變量匹配。

如果匹配,則連接第3列中的另一個變量。 如果不匹配,則推送到相同的數組。

示例:

從其他循環/邏輯中獲取4個不同的變量。

$var1$var2$var3$var3

,並將它們推到一個臨時數組。

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

之前將它們推主陣列我需要檢查,如果VAR1在@new array的COLUMN1已經存在。如果存在,則連接同一行的第三列。

如果var1不存在於@new array的列1中,則將@local2推送到@new

如果有人知道我如何做到這一點,請張貼如何,將不勝感激。

謝謝:)

+2

你到目前爲止嘗試過什麼,破了什麼?關於「multidimentional數組」的哪些文檔您閱讀過,並在Perl中「在數組中搜索」? – DVK 2011-02-12 12:51:32

回答

0

說明有點含糊,但這可能會做你想做的。您需要的部分位於'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; 
} 
0

你不說你的數組是如何組織的。如果它是一個行數組,那麼map函數就是你想要的工具。編寫適用於單行的代碼,然後使用map將其應用於每一行並收集結果。