组合数组以获取哈希数组

时间:2018-07-02 19:38:31

标签: arrays perl loops hash

我有三个数组需要存储在一起以备将来使用。每个数组彼此相关,每个位置的每个数组元素都必须匹配在一起。数组元素顺序永远都是正确的,但是除此之外,没有一种简单的方法可以识别丢失的正确顺序。

如何在不丢失其原始顺序的情况下将这些阵列组合在一起?

我假设最好使用散列数组,但是,如果我在这个假设中错了,请告诉我。

示例数组:

my @numbers = (5,2,7,32,9);
my @letters = qw(z b t t c);
my @words   = qw(tiny book lawn very dance);

示例最终结果。

my @combined_arrays = (
       {
           'number' => '5',
           'letter' => 'z',
           'word'   => 'tiny',
       },
       {
           'number' => '2',
           'letter' => 'b',
           'word'   => 'book',
       },
       {
           'number' => '7',
           'letter' => 't',
           'word'   => 'lawn',
       },
       {
           'number' => '32',
           'letter' => 't',
           'word'   => 'very',
       },
       {
           'number' => '9',
           'letter' => 'c',
           'word'   => 'dance',
       },
);

2 个答案:

答案 0 :(得分:4)

我会这样

my @combined_arrays = map { "number" => $numbers[$_] , "letter" => $letters[$_] , "word" => $words[$_] } , 0..@letters-1;

答案 1 :(得分:3)

我知道您已经接受了答案,但是我想我只是抛出了一个更简洁的选项,该选项依赖于某些模块。

我正在使用loadLocation [] = [loadLocation1, loadLocation2, ...] loadMagnitude[] = [loadMagnitude1, loadMagnitude2, ...] (又名zip,来自List::SomeUtilsList::MoreUtils)和mesh(来自List::UtilsBy),但是我正在通过List::AllUtils导入它们。

zip_by

它可能更具可读性,但前提是您熟悉use strict; use warnings; use List::AllUtils qw( zip zip_by ); my @numbers = (5,2,7,32,9); my @letters = qw(z b t t c); my @words = qw(tiny book lawn very dance); my @keys = qw(number letter word); my @combined = zip_by { +{ zip @keys, @_ } } \@numbers, \@letters, \@words; zip的工作。至少可以容纳80个字符。

更新 我最初在zip_by中有\%{{ zip @keys, @_ }}。这是为了迫使它将我的curl解释为hash-ref。然后我想起zip_by是消除歧义的更漂亮方法。