需要在Perl的foreach循环中的字符串中找到重复的值

时间:2018-10-18 17:39:18

标签: perl foreach

我正在打开一个包含哈希的文件,并创建一个字符串,并将我的字符串设置为与哈希中该键的值相等,因此我可以将该字符串中的所有包含值包含在我的字符串中。我正在通过一个foreach运行它,因此我将文件哈希值中的每个值都放入了我的字符串中:

open FN, '<', $file or die;

%hash = packageInt(); // this is the hash from the file I just opened above '$file'

foreach my $val (sort keys %hash) {

$id = $hash{$val}{id};

print "IDS: $id\n";


}

当我打印$ id时,我得到5个值:

4353
7653
5431
4353
8769

我想找到重复的值,在这种情况下为4353,并从我的字符串变量$id中删除它们,然后将$id仅分配给那些未被复制的值。在这种情况下,7653, 5431, 8769。因为我的标准对在重复ID上进行测试不感兴趣。我很难弄清楚如何跟踪重复的ID值并从字符串中删除它们,因为字符串处于foreach循环中。任何帮助或指导,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您说“从字符串变量中删除”,但您的意思似乎是“进行到循环的下一遍”。

my %seen;
for my $val (sort keys %hash) {
   my $id = $hash{$val};
   next if $seen{$id}++;

   ...
}