如何从perl数组中删除相邻的重复值

时间:2014-05-28 04:18:24

标签: perl

我有一个数组@vector_count。

情况1:大多数时候加载的值如下:

my @vector_count = (124130,893187,275917,601123);
情况2:在某些情况下,它获得的值如下:

my @vector_count = (151625,151625,1790345,1790345,158384,158384,58837,58837,308533,308533);

在这种情况下,我需要确保重新安排省略重复项:例如

my @vector_count = (151625,1790345,158384,,58837,308533);
情况3:可能存在某种情况,例如任何实际值可能重复(不是全部)。在这种情况下,不应该删除该值,认为它是重复的:

my @vector_count = (151625,1790345,58837,58837,308533);

如何包含所有3种情况。

1 个答案:

答案 0 :(得分:0)

听起来您有一个非常具体的用例要检测。如果所有数组元素都与副本配对,那么您希望删除相邻的副本。否则,您希望单独保留阵列。

use strict;
use warnings;

my @vector_count = (151625,151625,1790345,1790345,158384,158384,58837,58837,308533,308533);

# Detect universal adjacent duplicates
if (! grep {($_ % 2) == 0 && $vector_count[$_] ne $vector_count[$_ + 1]} (0..$#vector_count)) {
    @vector_count = @vector_count[grep {$_ % 2} (0..$#vector_count)];
}

print "@vector_count\n";

输出:

151625 1790345 158384 58837 308533