【问题标题】:Flatten part of an array in Perl?在 Perl 中展平数组的一部分?
【发布时间】:2014-07-28 12:24:02
【问题描述】:

基本上当我使用 Data::Dumper 时,我得到了

$VAR1 = [
          '63',
          'Joe',
          'Bloggs',
          '8-Mon',
          'FAU70',
          8
        ];
$VAR2 = 'Bye';

但我想得到的是

$VAR1 = 'Joe Bloggs 8-Mon';
$VAR2 = 'Bye';

关于我如何处理数组以仅包含一个曾经是其中多个值的值的任何想法?

谢谢!

【问题讨论】:

  • 你能展示一些实际的代码吗?

标签: perl


【解决方案1】:

假设你在变量@array 中有数组

my @array=(['63','Joe','Bloggs','8-Mon','FAU70',8],'Bye');

这个数组结构上的 Dumper 是这样工作的:

$VAR1 = [
          '63',
          'Joe',
          'Bloggs',
          '8-Mon',
          'FAU70',
          8
        ];
$VAR2 = 'Bye';

用它来得到你想要的:

map{$_=join(" ",@$_[1..4]) if(ref $_ eq 'ARRAY');} @array;

现在 dumper 会这样打印:

$VAR1 = 'Joe Bloggs 8-Mon FAU70';
$VAR2 = 'Bye';

【讨论】:

【解决方案2】:

您可以使用切片 [1..3] 然后将 join 选择数组的部分,然后使用 join 将它们合并为一个字符串,如下所示:

my $a = [ '63', 'Joe', 'Bloggs', '8-Mon', 'FAU70', 8 ];
my $var1 = join ' ', @$a[1..3];
my $var2 = 'bye';
print "$var1 $var2\n";

输出:

Joe Bloggs 8-Mon bye

【讨论】:

    【解决方案3】:

    如果您希望将所有数组引用列为字符串,您只需将它们转换:

    use strict;
    use warnings;
    
    use Data::Dumper;
    
    my @array = (['63', 'Joe', 'Bloggs', '8-Mon', 'FAU70', 8], 'Bye');
    
    print Dumper(map {ref $_ ? "@$_" : $_} @array);
    

    输出:

    $VAR1 = '63 Joe Bloggs 8-Mon FAU70 8';
    $VAR2 = 'Bye';
    

    但是,如果您的目标只是更严格的输出,我建议您研究 Data::Dump 作为 Data::Dumper 的替代方案:

    use strict;
    use warnings;
    
    my @array = (['63', 'Joe', 'Bloggs', '8-Mon', 'FAU70', 8], 'Bye');
    
    use Data::Dump;
    dd @array;
    

    输出:

    ([63, "Joe", "Bloggs", "8-Mon", "FAU70", 8], "Bye")
    

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 2018-10-08
      • 1970-01-01
      • 2012-05-01
      • 2014-01-29
      • 1970-01-01
      • 2014-08-19
      • 2017-12-23
      • 1970-01-01
      相关资源
      最近更新 更多