加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – 如何将数组[key1,val1]映射到perl中的散列{key1 => v

发布时间:2020-12-15 23:31:10 所属栏目:大数据 来源:网络整理
导读:问题是我有一个数组,其键值对作为数组中的元素,我必须以某种方式将它们拆分为key =散列中的值对. 我的第一次尝试是有效的,但我认为它非常混乱 – 我必须得到数组的所有其他元素,然后过滤以找到接受的键来创建一个哈希与 my $HASH;my $ARRAY = [ key1,val1,ke
问题是我有一个数组,其键值对作为数组中的元素,我必须以某种方式将它们拆分为key =>散列中的值对.

我的第一次尝试是有效的,但我认为它非常混乱 – 我必须得到数组的所有其他元素,然后过滤以找到接受的键来创建一个哈希与

my $HASH;
my $ARRAY = [ key1,val1,key2,val2,__key3__,val3,__key4__,val4 ];
   my @keys = map{ $ARRAY[ $_*2   ] } 0 .. int($#ARRAY/2);
   my @vals = map{ $ARRAY[ $_*2+1 ] } 0 .. int($#ARRAY/2);

   my $i = 0;
   #filter for keys that only have __key__ format
    for $key (@keys){
      if( $key && $key =~ m/^__(.*)__$/i ){
       $HASH{$1} = $vals[$i];
      }
     $i++;
    }
   # only key3 and key4 should be in $HASH now

我发现这个sample code我认为接近我正在寻找的但我无法弄清楚如何在数组上实现类似的东西而不是迭代文本文件的行:

$file = 'myfile.txt'
open I,'<',$file
my %hash;
%hash = map { split /s*,s*,/,$_,2 } grep (!/^$/,<I>);
print STDERR "[ITEM] $_ => $hash{$_}n" for keys %hash;

你们中的任何人都可以帮助我理解最好的方法吗?即使我可以以某种方式将所有元素连接成一个字符串,然后拆分每一秒的空格令牌 – 这也可能有用,但现在我卡住了!

解决方法

这很容易:

use strict; use warnings;
use YAML;

my $ARRAY = [qw(key1 val1 key2 val2 __key3__ val3 __key4__ val4)];
my $HASH =  { @$ARRAY };

print Dump $HASH;

输出:

C:Temp>
---
__key3__: val3
__key4__: val4
key1: val1
key2: val2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读