Perl Array to Hash

问题描述 投票:0回答:3

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

我有:

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

当我想要的时候

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

码:

$Hash{$_}++ for (@line);
perl hash
3个回答
2
投票

基于另一个问题,您的输入是@array,输出是%hash,其中散列的值在数组中散列键的数组中偏移。如果是这样,我想你想要这个:

$hash{$array[$_]} = $_ for (0 .. $#array);

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
        };

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将转储所有哈希键及其值,但不会按其创建的顺序转储。

© www.soinside.com 2019 - 2024. All rights reserved.