簡體   English   中英

Perl grep總是返回列表上下文中的匹配數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM