我最近在Perl 5中"需要"一个zip函数(当时我正在考虑如何计算相对时间?),即一个函数,它将两个列表和"拉链"一起放到一个列表中,交错元素.
(伪)例如:
@a=(1, 2, 3);
@b=('apple', 'orange', 'grape');
zip @a, @b; # (1, 'apple', 2, 'orange', 3, 'grape');
Run Code Online (Sandbox Code Playgroud)
哈斯克尔在前奏拉链和Perl 6的有一个拉链运营商内置的,但你怎么做它在Perl 5优雅的方式?
出于好奇,是否有另一种方法可以提取我的AoH结构的子集?AoH是“矩形”的(即,保证所有哈希引用具有相同的键)。
map对于本质上是花哨的哈希片,使用temp var和nested s似乎有点过多:
use strict;
use warnings;
use Data::Dump 'dump';
my $AoH = [ # There are many more keys in the real structure
{ a => "0.08", b => "0.10", c => "0.25" },
{ a => "0.67", b => "0.85", c => "0.47" },
{ a => "0.06", b => "0.57", c => "0.84" },
{ a => "0.15", b => "0.67", c => "0.90" },
{ a => "1.00", b => "0.36", c => "0.85" …Run Code Online (Sandbox Code Playgroud) 我需要帮助找出如何适应$ hash {$ i}加载不同大小的@headers数组的情况.用严格; 使用警告;
my $file = "list.csv";
open (FILE,"$file") || die "Can't open file: $!\n";
my (@lines) = <FILE>;
close(FILE);
my @headers = split(',',$lines[0]);#split up header line
my %hash;
for (my $i=1; $i < scalar(@lines); $i++)
{
my @strings = split(',',$lines[$i];
# NEED help here
$hash{$i} = {
$headers[0] => $strings[0],
$headers[1] => $strings[0],
$headers[2] => $strings[0],
$headers[3] => $strings[0],
$headers[4] => $strings[0],
$headers[5] => $strings[0]
};
}
Run Code Online (Sandbox Code Playgroud)
在标量(@headers)= 5,6,7等等的情况下,有没有办法在索引处加载哈希?是否存在类似...的程序等效
$hash{$i} = {
$headers[0] => $strings[0],
...
$headers[n] …Run Code Online (Sandbox Code Playgroud)