标签: perl-data-structures

如何根据另一个哈希的键/值删除[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中使用列表哈希

对不起这个语法问题.我找不到解决办法.我想在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:计算复杂数据结构中的元素

我是复杂数据结构的新手.我有点理解他们背后的想法,但是在获取数据方面遇到了一些困难.我通过使用Data :: Dumper找到了当前问题孩子的结构....

$VAR1 = {
      '4' => {
               'engine_coded' => 0,
               'name' => 'FILTER_1',
               'filter_actions' => {
                                     'X_Override_Queue_Level' => 'Value'
                                   },
               'filter_criteria' => [
                                      [
                                        'X_Charge',
                                        '=',
                                        'X_CHARGE_1'
                                      ]
                                    ]
             }
    };
Run Code Online (Sandbox Code Playgroud)

我需要做的是确保给定一个过滤器名称(在本例中为"4"),"name"有一个值,以及"filter_actions"和"filter_criteria".

任何人都知道如何最好地完成这个?非常感谢!珍妮

arrays perl hash perl-data-structures

3
推荐指数
1
解决办法
373
查看次数

帮助步行/排序复杂的Perl数据结构(HoH with AoH fun)

我现在一直在靠墙撞墙几个小时.

我有一个看起来像这样的数据结构(从"Data :: Dumper"输出).这是我自己的错,我正在创建数据结构,因为我正在解析一些输入.

print Dumper $data;

___OUTPUT___
$VAR = { 'NAME' => {
                    'id' => '1234',
                    'total' => 192,
                    'results' =>  { 
                                     'APPLE'   => 48 ,
                                     'KUMQUAT' => 61 ,
                                     'ORANGE'  => 33 ,
                                  }
                   }

       }
Run Code Online (Sandbox Code Playgroud)
  • 有数千个"NAME"键.
  • 只有一个"id"和一个"total".
  • "结果"哈希中可能有一个或多个键/值对.

我想打印出逗号分隔列表,首先按"total"排序,然后按"results"数组中每个散列的值排序.

以下代码用于从已存储的数据结构中打印出CSV.

use strict;
use warnings;
# [...lots of other stuff...]

open (my $fh, >out.csv);
print $fh "Name, ID, Label, Count, Total\n";

foreach ( sort { $data->{$b}->{total} <=> $data->{$a}->{total} }
    keys %{$data} )
{
    my $name = $_;
    foreach …
Run Code Online (Sandbox Code Playgroud)

perl perl-data-structures

3
推荐指数
1
解决办法
1858
查看次数

Perl Multi hash vs Single hash

我想从文件中读取和处理输入集,然后将其打印出来.我需要使用3个密钥来存储数据.假设有3个键k1, k2, k3

以下哪项将提供更好的性能

$hash{k1}->{k2}->{k3} = $val;
Run Code Online (Sandbox Code Playgroud)

要么

$hash{"k1,k2,k3"} = $val;
Run Code Online (Sandbox Code Playgroud)

对于我之前的问题,我得到的答案是所有perl哈希键都被视为字符串.

perl perl-data-structures

3
推荐指数
1
解决办法
776
查看次数

我不明白这个Perl语法,有没有人有任何想法?

我从Perl插件中获得了这部分内容.我不明白它的作用.它是关联数组的数组吗?如果是这样,那么它不应该以@开头吗?任何人都可以对这个问题有所了解吗?

my $arguments =
  [ { 'name' => "process_exp",
    'desc' => "{BasePlugin.process_exp}",
    'type' => "regexp",
    'deft' => &get_default_process_exp(),
    'reqd' => "no" },
  { 'name' => "assoc_images",
    'desc' => "{MP4Plugin.assoc_images}",
    'type' => "flag",
    'deft' => "",
    'reqd' => "no" },
  { 'name' => "applet_metadata",
    'desc' => "{MP4Plugin.applet_metadata}",
    'type' => "flag",
    'deft' => "" },
  { 'name' => "metadata_fields",
    'desc' => "{MP4Plugin.metadata_fields}",
    'type' => "string",
    'deft' => "Title,Artist,Genre" },
  { 'name' => "file_rename_method",
    'desc' => "{BasePlugin.file_rename_method}",
    'type' => "enum",
    'deft' => &get_default_file_rename_method(), …
Run Code Online (Sandbox Code Playgroud)

arrays perl reference perl-data-structures

3
推荐指数
1
解决办法
221
查看次数

perl中这个变量的数据结构是什么?

我是perl的新手并且阅读用perl编写的代码.一行如下:

$Map{$a}->{$b} = $c{$d};
Run Code Online (Sandbox Code Playgroud)

我熟悉哈希的样子%samplehash和访问方式$samplehash{a}="b"

但是上面这句话实际上是什么说Map?

perl perl-data-structures

3
推荐指数
2
解决办法
222
查看次数

unpack函数没有给出类似的结果

我有一个二进制文件,并获得我使用"解包"功能的内容.

我的脚本可以运行32位exe或64位exe.因此我使用了以下代码:

if ( $ENV{PROCESSOR_ARCHITECTURE} eq 'x86' )
{
    @data = unpack( "LL8", $binary );
} 
else 
{
    @data = unpack( "Q8", $binary );
} 
    print Dumper \@data;  
Run Code Online (Sandbox Code Playgroud)

但是当我使用32位Active Perl和64位Active perl编译器执行相同操作时,我得到的结果不同:

32位:

$ VAR1 = [129864071,0,47193587,0,16448777,0,41067198,0,129];

64位:

$ VAR1 = [129864071,47193587,16448777,41067198,129,365173507,25208052,152155982]

造成这种差异的原因是什么?如何在仍然使用32位无符号长和64位无符号四元组值的同时使它们相似?

perl perl-module perl-data-structures

3
推荐指数
1
解决办法
106
查看次数

Perl:搜索数组中的项目

鉴于array @A我们想要检查element $B它是否在其中.一种方法是这样说:

Foreach $element (@A){
    if($element eq $B){
        print "$B is in array A";
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,当它到达Perl时,我总是在思考最优雅的方式.这就是我的想法:如果我们将A转换为变量字符串并使用,有没有办法找出数组A是否包含B

index(@A,$B)=>0
Run Code Online (Sandbox Code Playgroud)

那可能吗?

arrays variables perl hash perl-data-structures

3
推荐指数
2
解决办法
509
查看次数

具有数组值的哈希哈希值

我正在尝试使用散列哈希与数组值概念生成哈希.我不确定我的语法是否正确.

下面是我希望应该创建具有数组值的哈希哈希值的代码部分.

 use strict;
 %hash=();
 open IN, "samplefile.txt" or die "cannot open file:$!"; 
 while(<IN>){
     chomp $_;
     my @split=split("\t", $_);
     $hash{$split[0]}{$split[1]}=push @{ $hash{$split[0]}{$split[1]} },$split[2];
     push(@array, $split[1]);
  }
Run Code Online (Sandbox Code Playgroud)

样本数据集:

4 10 2
9 4 3
4 3 2
4 3 8
4 10 5
4 5 2
Run Code Online (Sandbox Code Playgroud)

期待哈希.

%hash=(
    '4'=> {
    '10'=>'2, 5'
     '5' => '2'
     '3' => '2,8'
   }
 '9'=>{
     '4'=>'3'
 }
)
Run Code Online (Sandbox Code Playgroud)

perl perl-data-structures

3
推荐指数
1
解决办法
205
查看次数