【问题标题】:Handling multiple values in a perl hash在 perl 哈希中处理多个值
【发布时间】:2014-07-17 12:57:03
【问题描述】:

我在 %ARGS 中有一个 perl 哈希值传递给我。我必须实现这样的功能,如果对于所需的最小键集(比如 key1、key2、key3、key4、key5),哈希中有多个值,那么我需要获取第一个值并用最小集填充哈希键。

目前我有。

while (my ($key, $value) = each(%ARGS)) {
    #check if key is equal to the keys from the set.
    if (ref($value) ) {
          #means its a nested key value pair.
          extract first value and put it for the key 

我如何确定这一点。任何指针都会很有用

【问题讨论】:

  • use Data::Dumper; print Dumper(\%ARGS); 查看 %ARGS 的结构。然后你可以给我们看一个相同格式的例子。
  • 您的任务是将选定的键/值对复制到另一个散列吗?如果是这样,为什么不直接遍历选定的键呢? for (qw(key1 key2 ...))
  • 不,我应该用最少的键集修改相同的哈希值。
  • 你的意思是你应该从%ARGV 中删除除最小集合key1, key2, ... 之外的所有键?
  • 是的,这正是我需要做的

标签: perl hash


【解决方案1】:

听起来你只需要创建一个默认值的散列。

您可以使用该哈希来初始化您的主哈希,以确保每个键都存在。然后您可以使用相同的哈希将 %ARGS 哈希限制为仅您希望它拥有的那些键:

my %def_args = (
    key1 => '',
    key2 => '',
    key3 => '',
    key4 => '',
    key5 => '',
);

# Selectively Initialize Args with Defaults:
%ARGS = (%def_args, %ARGS);

# Restrict ARGS to just default keys
delete @ARGS{grep {! exists $def_args{$_}} keys %ARGS};

【讨论】:

  • 如果键存在多个值,那么我需要选择第一个。
  • 哈希键是唯一的。如果您认为有多个值,那么您就没有准确地解释您的情况。随意编辑您的原始问题,以更全面地描述您的情况和您面临的问题。
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 2013-01-04
  • 2016-07-22
  • 1970-01-01
  • 2012-02-01
  • 2014-02-05
  • 2010-09-16
  • 2010-10-20
相关资源
最近更新 更多