[英]Perl grep always returns number of matches even in list context
我有一個列表的腳本
@names = ();
@x = ();
兩個列表都與數據並行填充,因此,最后我有兩個列表,其中包含同一索引中每個元素的名稱和x值。 注意,有多個元素具有相同的x值。
我希望所有元素都具有特定的x值和代碼
foreach my $x (0..4) {
my @ind = grep { $x[$_] == $x } 0..$#names;
print @ind . "\n";
}
但是,輸出是
17
17
8
4
這正是x = 0,x = 1,......的元素數量
我想知道因為列表上下文中的grep應該返回一個匹配列表(這里是匹配元素的indizes)。
我在這做錯了什么?
最好的祝福。
你的問題是這一行:
print @ind . "\n";
使用連接運算符時.
將兩個參數放入標量上下文中,在標量上下文中,數組返回其大小,而不是其內容。
你想要的是使用逗號運算符:
print @ind , "\n";
或者更好的是,使用該功能say
:
say @ind;
如果你真正想要的是在一行中打印數字,用空格分隔:
say "@ind";
或者如果您想要以換行符分隔打印它們:
say for @ind;
在上述所有的, say
當然可以通過更換print
,並在最后一個新行。
您應該使用哈希數組將數據存儲為一個單元。 在那里你填充做到這一點@x
和@names
。 (假設x值在$x
,名稱在$name
。)
push @data, {
name => $name,
x => $x,
};
要在索引$i
處檢索名稱: $data[$i]{name}
要在索引$i
處檢索x值: $data[$i]{x}
迭代數組:
for my $item_ref ( @data ){
my $name = $item_ref->{name};
my $x = $item_ref->{x};
# do something
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.