有啥办法可以拆分数组中的哈希值吗?

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 在这里是一个字符串数组。 mapsplit ":", $_,2 应用于数组的每个元素,这将每个字符串拆分为最多 2 个字段(如下面的评论中所述)并将结果返回给 %hash。最后,%hash 将以 ids 作为键,pwds 作为值。

如果您需要更多帮助,可以阅读:

    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() 的第三个参数,因此字符串只会被分成两部分(它与您现有的数据没有区别 - 但最好是安全的)。

这些都不会对您的代码的工作方式产生任何影响 - 它们只会让您的代码更易于阅读和理解。

【讨论】:

以上是关于有啥办法可以拆分数组中的哈希值吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的多值哈希表

Vue Cli 3 禁用代码拆分 - 无法摆脱哈希文件

从 Kotlin 中的列表或哈希映射数组列表中拆分字符串

Ruby - 关键字参数 - 你能把所有的关键字参数当作一个哈希值吗?如何?

文件的哈希值事啥意思

哈希表中的条目是否可以使用相同的键和相同的值?