2011-02-12 144 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将其应用于每一行并收集结果。