最後のIDではなく、配列内の合計アイテムを取得するにはどうすればよいですか?
これを行うために私が見つけた2つの方法のどれも:
my @a;
# Add some elements (no consecutive ids)
$a[0]= '1';
$a[5]= '2';
$a[23]= '3';
print $#a, "\n"; # Prints 23
print scalar(@a), "\n"; # Prints 24
私は3を取得する予定でした...
sparse array が必要なようです。通常の配列には24個の項目がありますが、スパース配列には3個あります。Perlでは、ハッシュを使用してスパース配列をエミュレートします。
#!/usr/bin/Perl
use strict;
use warnings;
my %sparse;
@sparse{0, 5, 23} = (1 .. 3);
print "there are ", scalar keys %sparse, " items in the sparse array\n",
map { "\t$sparse{$_}\n" } sort { $a <=> $b } keys %sparse;
スカラーコンテキストのkeys
関数は、スパース配列のアイテムの数を返します。ハッシュを使用してスパース配列をエミュレートする唯一の欠点は、順序が重要な場合、キーを反復処理する前にキーをソートする必要があることです。
また、 delete
関数を使用してスパース配列から項目を削除することも忘れないでください(値をundefに設定するだけでは不十分です)。
代わりに(またはさらに)ハッシュが必要な場合があります。配列は要素の順序付けられたセットです。 $foo[23]
を作成すると、$foo[0]
を介して$foo[22]
を暗黙的に作成します。
print scalar grep {defined $ _} @a;
@people = qw( bob john linda );
$n = @people; # the number 3
Print " le number in the list is $n \n";
Perlの式は、常にコンテキストに適した値を返します。たとえば、配列の「名前」*はどうですか。リストコンテキストでは、要素のリストを提供します。しかし、スカラーコンテキストでは、配列内の要素の数を返します。
sub uniq {
return keys %{{ map { $_ => 1 } @_ }};
}
my @my_array = ("a","a","b","b","c");
#print join(" ", @my_array), "\n";
my $a = join(" ", uniq(@my_array));
my @b = split(/ /,$a);
my $count = $#b;