大佬教程收集整理的这篇文章主要介绍了Perl – 内置功能“拉链”在一起的两个阵列?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
# 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; }
产量
$ ./zipper.pl easy=e dog=d fox=f charlie=c baker=b abel=a
我想知道如果我忽略了Perl中的一个内建函数,这将相当于拉链()。它将在程序的最内层循环,并且需要尽可能快地运行。如果没有内置或CPAN模块,任何人都可以改进我的实现?
#!/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;
附录
我想到为什么可以选择一种方法。我个人认为切片实现与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; },});
结果:
Rate zip slice zip 51282/s -- -34% slice 78125/s 52% --
以上是大佬教程为你收集整理的Perl – 内置功能“拉链”在一起的两个阵列?全部内容,希望文章能够帮你解决Perl – 内置功能“拉链”在一起的两个阵列?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。