【问题标题】:Number of subarrays array of arrays in PerlPerl 中数组的子数组数
【发布时间】:2014-06-04 20:50:48
【问题描述】:

我正在尝试获取数组数组中“子数组”的数量...

即:

原文:

@array = (("a","b","c"),(1,2,3),("q","w","e"));

修改:

@array = (["a","b","c"],[1,2,3],["q","w","e"]);

我将如何获得这个号码? (在这种情况下,它将是 3。)

【问题讨论】:

  • print scalar(@array) 给你什么?我认为答案是 9,因为“子阵列”不存在——它们已被扁平化为一个阵列。您需要使用数组引用来获取子数组,并在子数组周围加上方括号。
  • 它输出标量(ARRAY(0x80872ec))
  • 如果它显示ARRAY(0xfoo),您的问题中没有您所说的内容。请显示真实代码,或者如果它来自对答案的评论中所说的哈希(参考),请显示真实的调试输出。
  • 检查您的输入;那 (scalar(ARRAY(0x80872ec)) 与 Perl 5.18.1 给出的完全不同——它给出了 9。
  • 当你不准确地问问题时,人们很难准确地帮助你。您的更改非常重要,但人们已经根据原始代码真诚地回答了。最好显示一个 SSCCE (Short, Self-Contained, Correct Example),以及从作为 SSCCE 发布的代码中获得的确切输出。如果 print scalar(@array) 在修改后的代码中没有产生 3,您可能需要向我们展示 use Data::Dumper;print Dumper(\@array); 打印的内容。

标签: arrays perl


【解决方案1】:

你没有任何“子数组”。

my @array = (['a','b','c'],['a','b','c'],['a','b','c']);

然后只是

print scalar @array;

打印出来的

3

您想要一个数组数组,这可以通过拥有一个arrayrefs 数组来完成。可以使用 [,] 方括号创建数组引用。

my $array_ref = ['a','b','c'];

您可以取消引用带有前导 @Arrayref

print scalar @$array_ref;
# or an more readable version
print scalar @{ $array_ref }

【讨论】:

  • 我确实有“子数组”,我最初在问题中的方式不是它在我的代码中的方式......对不起。
  • 当我尝试打印它时,我得到这个输出:scalar(ARRAY(0x80872ec))
  • @user3707618,您将scalar(@a) 更改为"scalar($a)"
  • @ikegami 请查看问题的编辑 :)
【解决方案2】:

要计算数组引用中的数组引用,您可以将grepref built-in 一起使用。假设在您的外部数组 ref 中可能有其他东西以及数组 refs,您可以这样做:

my @array = (["a","b","c"],[1,2,3],["q","w","e"], 4);
my $count = scalar grep { ref $_ eq 'ARRAY' } @array;
print $count;

__END__
3

它将依次查看@array 的每个元素,抓取具有ref 类型的ARRAY 并强制结果列表为标量上下文,给出元素的数量。


由于您似乎有一个哈希引用,其中包含数组引用和数组引用,也许将其更改为这个就可以了。我以为你可以自己进行转移。

my $count = scalar grep { ref $_ eq 'ARRAY' } @{ $hashref->{element} };

【讨论】:

  • 如果只有array refs并且你想计算所有元素,其他答案已经可以了。
【解决方案3】:

使用以下评论中的信息回复修改后的问题:

听起来您实际上拥有的是数组哈希,如 Borodin 的 answer 对您之前的问题所展示的那样:

my %hash = (
    key => [ ["a", "b", "c"], [1, 2, 3], ["q", "w", "e"] ],
);

在这种情况下,要获取计数,您需要使用 scalar 并取消引用数组 ref:

print scalar(@{$hash{key}}), "\n";

输出:

3

【讨论】:

  • 实际上并不存在“多维数组”。你这里有一个arrayrefs数组。
  • 它的定义方式是任意的,我已经有了数组(它是从哈希中读取的)
  • @user3707618 由于您正在从哈希中读取数据,因此您需要取消引用该值才能实际获取计数。
  • "Same Error" 如果您以前没有谈论过错误,则不会传达任何信息。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 2016-09-07
  • 2013-09-10
  • 1970-01-01
  • 2012-03-10
  • 2020-01-11
  • 2015-01-29
  • 2013-01-24
相关资源
最近更新 更多