【问题标题】:How can I make a Perl hash from an array with the keys and another array with the values?如何从带有键的数组和带有值的另一个数组中创建 Perl 哈希?
【发布时间】:2011-01-19 09:14:51
【问题描述】:

在 Perl 中,如何从具有相同数量元素的数组 @A@B 生成哈希?目标是将@A 的每个值作为@B 中的值的键。生成的哈希 %C 将使得可以唯一地标识来自 @B 的元素,并提供来自 @A 的键。

【问题讨论】:

    标签: perl arrays hash


    【解决方案1】:

    就这么简单

    my %c;
    @c{@a} = @b;
    

    【讨论】:

    • 太棒了!虽然我经常使用切片解决方案,但我忘记了它。
    • 你可能读错书了。 Learning Perl 在 slice 部分展示了这一点。 :)
    【解决方案2】:
    use List::MoreUtils 'mesh';
    my %c = mesh @a, @b;
    

    这就是内部制作的方式(如果您确定元素数量相等):

    my %c = map { $a[$_] => $b[$_] } 0 .. $#a;
    

    【讨论】:

    • 不错,没想过用地图。
    • 或自己动手:sub mesh { @_[map $_&1 ? $_>>1 : ($_>>1)+($#_>>1), 1..@_] }
    【解决方案3】:

    如果我正确理解问题:

    my %c;
    $c{$a[$_]} = $b[$_] for (0 .. @a-1);
    

    【讨论】:

    • 我真的很喜欢 Perl,但有时人们会对一种允许您在源代码中使用比字母更多的非字母字符的编程语言感到绝望...
    • @Boldewyn:通常通过使用真实变量名来修复
    【解决方案4】:

    A 是键,B 是哈希 C 的值:

    use strict;
    use warnings;
    
    my @a = 1 .. 3;
    my @b = 4 .. 6;
    my %c;
    for (0 .. $#a) {
        $c{$a[$_]} = $b[$_]
    }
    

    请记住,A 数组中不能有任何重复值。

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2019-03-30
      • 2021-01-08
      相关资源
      最近更新 更多