【问题标题】:Need to find repeated value in string in foreach loop in perl需要在perl的foreach循环中查找字符串中的重复值
【发布时间】:2018-10-18 17:39:18
【问题描述】:

我正在打开一个包含散列的文件,并创建一个字符串,并将我的字符串设置为等于散列中该键的值,因此我可以在我的字符串中保存该散列键值的所有内容。我正在通过 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 循环中。非常感谢任何帮助或指导。

【问题讨论】:

  • 始终使用use strict; use warnings qw( all );
  • “文件中的哈希”是什么意思?文件包含字节,而不是数据结构!

标签: perl foreach


【解决方案1】:

您说“从字符串变量中删除”,但您的意思似乎是“继续执行下一轮循环”。

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

   ...
}

【讨论】:

  • 我尝试实现您的代码,但没有解决我的问题。您能否再给我几行指导?
猜你喜欢
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多