有啥办法可以拆分数组中的哈希值吗?
Posted
技术标签:
【中文标题】有啥办法可以拆分数组中的哈希值吗?【英文标题】:is there any way I can split the hashes in an array?有什么办法可以拆分数组中的哈希值吗? 【发布时间】:2020-10-18 10:22:04 【问题描述】:我一直在尝试使用散列拆分数组,但出现以下错误
“在拆分中使用未初始化的值 $_”
@array = (("forest:k233356"),("wi45one:1onetothree"));
foreach(@array)
($id,$pwd)=split(":",$_);
从以下代码中,我无法拆分数组并将以下内容分配给$id
和$pwd
。任何线索将不胜感激!
【问题讨论】:
那些没有经过哈希处理。它们是字符串。试试($id,$pwd)=split(/:/);
1) 您发布的代码不会产生您声称的消息。它甚至不编译。 2) 如果您添加代码编译所需的卷曲,它会完全按照您的意愿进行。
【参考方案1】:
一种可能的方法是:
@array = ("forest:k233356", "wi45one:1onetothree");
%hash = map split(":",$_, 2) @array;
@array
在这里是一个字符串数组。 map
将 split ":", $_,2
应用于数组的每个元素,这将每个字符串拆分为最多 2 个字段(如下面的评论中所述)并将结果返回给 %hash
。最后,%hash
将以 id
s 作为键,pwd
s 作为值。
如果您需要更多帮助,可以阅读:
-
https://perldoc.perl.org/perldata.html#List-value-constructors
https://perldoc.perl.org/functions/map.html
https://perldoc.perl.org/functions/split.html
【讨论】:
您需要 split 的第三个参数来确保您获得两个元素:split /:/, $_, 2
。否则,某些字符串可能会给出 1 个或两个以上的元素,这会混淆对 %hash
的分配。【参考方案2】:
除了您的代码没有编译(因此不可能给出您向我们展示的错误消息)这一事实之外,它非常接近正确答案。
这被轻微地清理和扩展(实际上将数据放入哈希中),但它与您开始使用的非常相似。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my %hash;
my @array = ("forest:k233356", "wi45one:1onetothree");
foreach (@array)
my ($id, $pwd) = split(/:/, $_, 2);
$hash$id = $pwd;
say Dumper \%hash;
几个风格点:
-
我在不同的地方添加了更多的空白。
我删除了定义数组时不必要的括号。
我将
split()
的第一个参数变成了正则表达式。
我添加了2
作为split()
的第三个参数,因此字符串只会被分成两部分(它与您现有的数据没有区别 - 但最好是安全的)。
这些都不会对您的代码的工作方式产生任何影响 - 它们只会让您的代码更易于阅读和理解。
【讨论】:
以上是关于有啥办法可以拆分数组中的哈希值吗?的主要内容,如果未能解决你的问题,请参考以下文章