标签: perl-data-structures

如何在Perl中创建哈希数组并在其中循环?

我正在尝试创建一个哈希数组,但是我在循环数组时遇到了麻烦.我试过这段代码,但它不起作用:

for  ($i = 0; $i<@pattern; $i++){
  while(($k, $v)= each $pattern[$i]){
    debug(" $k: $v");
  }
}
Run Code Online (Sandbox Code Playgroud)

arrays perl hash perl-data-structures

4
推荐指数
2
解决办法
1万
查看次数

如何从哈希哈希中获取哈希切片?

我有这样的哈希:

my %h = ( a => { one => 1,
                 two => 2
             },
          b => { three => 3,
                 four => 4
             },
          c => { five => 5,
                 six => 6
             }
      );

print join(',', @{$h{a}{qw/one two/}});
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:不能使用未定义的值作为q.pl第17行的ARRAY引用,这是打印行.

我的预期是1,2

perl hash slice perl-data-structures

4
推荐指数
1
解决办法
2317
查看次数

如何根据另一个哈希的键/值删除[sub]哈希?

让我们假设我有两个哈希.其中一个包含一组数据,只需要保留显示在另一个哈希中的内容.

例如

my %hash1 = ( 
        test1 => { inner1 => { more => "alpha", evenmore => "beta" } },
        test2 => { inner2 => { more => "charlie", somethingelse => "delta" } },
        test3 => { inner9999 => { ohlookmore => "golf", somethingelse => "foxtrot" } }
    );

my %hash2 = (
        major=> { test2 => "inner2",
              test3 => "inner3" }  );
Run Code Online (Sandbox Code Playgroud)

我想要做的是删除hash1中的整个subhash,如果它不作为hash2 {major}中的键/值存在,最好没有模块."innerX"中包含的信息无关紧要,只需要保持不变(除非删除子哈希然后它就会消失).

在上面的示例中,在执行此操作之后,hash1将如下所示:

my %hash1 = ( 
        test2 => { inner2 => { more => "charlie", somethingelse …
Run Code Online (Sandbox Code Playgroud)

perl hash perl-data-structures

4
推荐指数
1
解决办法
3455
查看次数

如何从Perl中的哈希数组创建哈希哈希?

我有一组哈希,都有相同的键组,例如:

my $aoa= [
 {NAME=>'Dave', AGE=>12, SEX=>'M', ID=>123456, NATIONALITY=>'Swedish'},
 {NAME=>'Susan', AGE=>36, SEX=>'F', ID=>543210, NATIONALITY=>'Swedish'},
 {NAME=>'Bart', AGE=>120, SEX=>'M', ID=>987654, NATIONALITY=>'British'},
]
Run Code Online (Sandbox Code Playgroud)

我想编写一个子程序,它将使用给定的键层次结构将其转换为哈希哈希值:

my $key_hierarchy_a = ['SEX', 'NATIONALITY'];
aoh_to_hoh ($aoa, $key_hierarchy_a) = @_;
 ...
}
Run Code Online (Sandbox Code Playgroud)

将返回

{M=>
  {Swedish=>{{NAME=>'Dave', AGE=>12, ID=>123456}},
   British=>{{NAME=>'Bart', AGE=>120, ID=>987654}}}, 
 F=>
  {Swedish=>{{NAME=>'Susan', AGE=>36,  ID=>543210}}
}
Run Code Online (Sandbox Code Playgroud)

请注意,这不仅会创建正确的密钥层次结构,还会删除现在的冗余密钥.

我陷入困境,需要在正确的分层位置创建新的,最内部的哈希.

问题是我不知道"深度"(即键的数量).如果我有一个常数,我可以这样做:

%h{$inner_hash{$PRIMARY_KEY}}{$inner_hash{$SECONDARY_KEY}}{...} = filter_copy($inner_hash,[$PRIMARY_KEY,$SECONDARY_KEY])
Run Code Online (Sandbox Code Playgroud)

所以也许我可以编写一个循环,一次添加一个级别,从散列中删除该键,而不是将剩余的散列添加到"当前"位置,但它有点麻烦,我也不知道如何保持哈希散列中的"位置"......

perl hash perl-data-structures

4
推荐指数
1
解决办法
477
查看次数

如何在perl中使用列表哈希

对不起这个语法问题.我找不到解决办法.我想在perl中有一个哈希数组,每个哈希都有字符串和数组.我正在尝试编写以下代码:

use strict;
my @arr = (
       { name => "aaa" , values => ("a1","a2") },
       { name => "bbb" , values => ("b1","b2","b3") }
      );


foreach $a (@arr) {
  my @cur_values = @{$a->{values}};
  print("values of $a->{name} = @cur_values\n");
};
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用.我收到编译错误和警告(使用perl -w)

a.pl第2行的匿名哈希中奇数个元素.在a.pl第9行使用"strict refs"时,不能使用字符串("a1")作为ARRAY引用.

perl perl-data-structures

4
推荐指数
2
解决办法
490
查看次数

如何遍历对Perl中哈希数组的引用?

我引用了一个hases数组,我将其传递给perl脚本中的子例程

这是代码:

sub mySub {
    (my $resultref) = @_;
    my @list = @$resultref;
    print Dumper(@list);
    foreach my $result (@list) {
        print Dumper($result);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

$VAR1 = [
          {
            'portName' => '1.1',
            'ips' => [
                       '192.168.1.242'
                     ],
            'switchIp' => '192.168.1.20',
            'macs' => [
                        '00:16:76:9e:63:47'
                      ]
          },
          {
            'portName' => '1.10',
            'ips' => [
                       '192.168.1.119',
                       '192.168.1.3'
                     ],
            'switchIp' => '192.168.1.20',
            'macs' => [
                        'd0:67:e5:f8:7e:7e',
                        'd0:67:e5:f8:7e:76'
                      ]
          },
        ];

$VAR1 = [
          {
            'portName' => '1.1',
            'ips' => [
                       '192.168.1.242'
                     ],
            'switchIp' …
Run Code Online (Sandbox Code Playgroud)

arrays perl hash perl-data-structures

4
推荐指数
1
解决办法
2516
查看次数

Perl:这是创建唯一数组的正确方法吗?

我正在尝试创建一个独特的数组,无论其原始顺序如何,并且不使用任何模块,这是我到目前为止所提出的:

my @arr = qw(b a a c d g e f);
my %hash;
@hash{@arr}=();
say keys %hash;
Run Code Online (Sandbox Code Playgroud)

arrays perl perl-hash perl-data-structures

4
推荐指数
1
解决办法
331
查看次数

Perl:如何将数组转换为嵌套的哈希键

我需要将一个平面的密钥列表转换为嵌套的哈希,如下所示:

我的$ hash = {};

我的@array = qw(key1 key2 lastKey Value);

ToNestedHash($ hash,@ array);

会这样做:

$ hash {'key1'} {'key2'} {'lastKey'} ="价值";

perl perl-data-structures

4
推荐指数
1
解决办法
1943
查看次数

无法在perl中获得CSV格式的所需哈希值

我已将最常见的emp表导出为CSV.我想将每个列名称作为哈希键并将值存储在数组中.

下面是代码

 use Data::Dumper;
    open($fh,"<EMP.csv");
    %hash = ();

    local $/= "\n";

    while(<$fh>){

         @columnNames = split(/,/,$_) if $. ==1;     
         @columnValues = split(/,/,$_);  
          push @{hash->{@columnNames}} ,@columnValues;       
    }

    print Dumper(\%hash);
Run Code Online (Sandbox Code Playgroud)

当我尝试打印哈希时,我得到了这个

$VAR1 = {
          '8' => [
                   '"EMPNO"',
                   '"ENAME"',
                   '"JOB"',
                   '"MGR"',
                   '"HIREDATE"',
                   '"SAL"',
                   '"COMM"',
                   '"DEPTNO"
',
                   '"7839"',
                   '"KING"',
                   '"PRESIDENT"',
                   '""',
                   '"11/17/1981"',
                   '"5000"',
                   '""',
                   '"10"
',
Run Code Online (Sandbox Code Playgroud)

但我期待这一点

$VAR1 = { '"EMPNO"'=>[12,3,4,5,6,7,8,9],
          '"EMPNAME"'=>["pavan","kumar"...],

};
Run Code Online (Sandbox Code Playgroud)

perl perl-data-structures

4
推荐指数
1
解决办法
216
查看次数

为什么哈希键在打印时有不同的顺序?

我想使用相同的键构建多个哈希,并且当我打印它们时键要具有相同的顺序.因此,在下面的例子中,密钥$hash1$hash2应始终具有相同的顺序,但应该没有必要创建哈希时保留这个顺序.

use Data::Dumper;

my $hash1 = {
  keyc => 2,
  key1 => 1,
  keya => 3,
  keyb => 4,
};

my $hash2 = {
  keyc => 2,
  key1 => 1,
  keya => 3,
  keyb => 4,
};

print Dumper $hash1, $hash2;
Run Code Online (Sandbox Code Playgroud)

但输出如下:

$VAR1 = {
          'key1' => 1,
          'keyc' => 2,
          'keyb' => 4,
          'keya' => 3
        };
$VAR2 = {
          'keyb' => 4,
          'keya' => 3,
          'keyc' => 2,
          'key1' => 1
        };
Run Code Online (Sandbox Code Playgroud)

哈希有不同的意外顺序.我的perl出了什么问题? …

sorting perl hash data-structures perl-data-structures

4
推荐指数
1
解决办法
1312
查看次数