Perl Array to Hash

时间:2018-03-02 22:52:20

标签: perl hash

我从这篇文章https://stackoverflow.com/a/16157433/3880362中获取灵感。它没有做的唯一事情就是在填充每个键时增加它们的值。即。

我有:

$Hash => {
      'Val1' => 1,
      'Val2' => 1,
      'Val3' => 1
 };

我想要的时候

$Hash => {
      'Val1' => 0,
      'Val2' => 1,
      'Val3' => 2
 };

代码:

$Hash{$_}++ for (@line);

3 个答案:

答案 0 :(得分:2)

根据另一个问题,您的输入为%hash,输出为$hash{$array[$_]} = $_ for (0 .. $#array); ,其中哈希值在数组中哈希键的数组中偏移。如果是这样,我想你想要这个:

/static/

答案 1 :(得分:1)

您可以迭代数组索引并使用它们来填充哈希值。 Perl数组从索引0开始。数组@foo的最后一个索引是$#foo。因此,您可以使用范围运算符..将所有索引作为0..$#foo

#!/usr/bin/env perl

use warnings;
use strict;

use Data::Dumper;
$Data::Dumper::Sortkeys++;

my @letters = 'a'..'g';
my %hash = map { $letters[ $_ ] => $_ } 0..$#letters;

print Dumper(\%hash);

<强>输出

$VAR1 = {
          'a' => 0,
          'b' => 1,
          'c' => 2,
          'd' => 3,
          'e' => 4,
          'f' => 5,
          'g' => 6
        };

答案 2 :(得分:0)

我认为您希望将数组@line的所有元素转换为散列%hash的散列键,其哈希值从0开始。在那种情况下:

use Data::Dumper;

my @line = qw( Val1 Val2 Val3 );
my %hash;

my $n = 0;
$hash{$_} = $n++ for(@line);

print Dumper(\%hash), "\n";

请注意,Dumper将转储所有散列键及其值,但不会按照它们的创建顺序转储。