Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Perl – 内置功能“拉链”在一起的两个阵列?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_618_1@我想通过从数组A中的第一个元素(数组B的第一个元素)中将两个相等长度的数组合并成一个数组,来自A的第二个元素,B的第二个元素等。以下程序说明了算法:
# file zipper.pl
use Strict;
use warnings;
use 5.010;

my @keys   = qw/abel baker charlie dog easy fox/;
my @values = qw/a b c d e f/;

# ==> Is there a builTin function that is equivalent of zipper()? <==
#
my %hash = zipper( \@keys,\@values );

while ( my ( $k,$v ) = each %hash ) {
    say "$k=$v";
}

# zipper(): Take two equal-length arrays and merge them (one from A,one from B,# another from A,another from B,etc.) into a single array.
#
sub zipper {
    my $k_ref = shift;
    my $v_ref = shift;
    die "Arrays must be equal length" if @$k_ref != @$v_ref;
    my $i = 0;
    return map { $k_ref->[ $i++ ],$_ } @$v_ref;
}
@H_675_4@产量

$ ./zipper.pl 
easy=e
dog=d
fox=f
charlie=c
baker=b
abel=a
@H_675_4@我想知道如果我忽略了Perl中的一个内建函数,这将相当于拉链()。它将在程序的最内层循环,并且需要尽可能快地运行。如果没有内置或CPAN模块,任何人都可以改进我的实现?

解决方法

其他人对网格/拉链方面的问题给出了很好的答案,但是如果您只是从一系列键和一个值创建哈希,您可以使用不赞赏的 hash slice
#!/usr/bin/env perl

use Strict;
use warnings;

my @keys   = qw/abel baker charlie dog easy fox/;
my @values = qw/a b c d e f/;

my %hash;
@hash{@keys} = @values;

use Data::Dumper;
print Dumper \%hash;
@H_675_4@附录

@H_675_4@我想到为什么可以选择一种方法。我个人认为切片实现与zip一样可读,但其他可能不同意。如果你经常这样做,你可能会关心速度,在这种情况下,切片形式更快。

#!/usr/bin/env perl

use Strict;
use warnings;

use List::MoreUtils qw/zip/;
use Benchmark qw/cmpthese/;

my @keys   = qw/abel baker charlie dog easy fox/;
my @values = qw/a b c d e f/;

cmpthese( 100000,{
  zip => sub {
    my %hash = zip @keys,@values;
  },slice => sub {
    my %hash;
    @hash{@keys} = @values;
  },});
@H_675_4@结果:

Rate   zip slice
zip   51282/s    --  -34%
slice 78125/s   52%    --

大佬总结

以上是大佬教程为你收集整理的Perl – 内置功能“拉链”在一起的两个阵列?全部内容,希望文章能够帮你解决Perl – 内置功能“拉链”在一起的两个阵列?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。