为什么$#比数组中的实际元素数少一个?

ask*_*ker 0 arrays perl

有谁知道为什么$#a一个比数组中的实际元素数少?

$ perl -we '@a=(1,2);print $#a'
1
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 12

那是最后一项的索引,因为数组从零开始(除非你搞好最好的东西),$#a它比数组的长度少一个.

  • @mob:[已弃用](https://metacpan.org/module/perlvar#Deprecated-and-removed-variables)所以它可能会随时消失(5.16?); 把它忘了吧 :) (3认同)
  • @mob:`$ [`是最好的东西,除非你是一个想要让人们维护你的代码受到损害并诅咒Perl的仇恨者. (2认同)

pb1*_*149 11

我想这是因为它是数组中最后一个元素的索引.由于数组索引从0开始,因此需要添加一个以获取数组中元素的总数.

注意:您也可以这样做来查找数组的计数:

@arr = ("one", "two");
$count =  @arr;
print $count;
Run Code Online (Sandbox Code Playgroud)

  • 确实.如果你想要计数,请使用`scalar @ a`. (6认同)