我有三个数组需要存储在一起以备将来使用。每个数组彼此相关,每个位置的每个数组元素都必须匹配在一起。数组元素顺序永远都是正确的,但是除此之外,没有一种简单的方法可以识别丢失的正确顺序。
如何在不丢失其原始顺序的情况下将这些阵列组合在一起?
我假设最好使用散列数组,但是,如果我在这个假设中错了,请告诉我。
示例数组:
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',
},
);
答案 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::SomeUtils
或List::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
是消除歧义的更漂亮方法。