arrays - 删除冗余数组元素

标签 arrays perl

我有一个包含许多主机名的数组。我想删除这个数组的冗余元素,即:

  • 如果存在重复条目,则删除其中之一。
  • 如果两者都www.example.comexample.com存在,www.example.com已移除。

  • 已回答删除重复项 here ,但我如何实现第二个条件?

    编辑:为了澄清起见,我必须提到 www.可能不是唯一存在的东西——它也可能是 abc.def.ghi.foo.bar.baz.quxfoo.bar.baz.qux ,在这种情况下,前者被删除。

    最佳答案

    所以你说你想删除后缀已经存在的元素。那么我们可以将后缀问题转化为前缀问题。然后我们可以使用有序数组前缀中字符串本身的特征。如果前一个字符串是它的前缀,那么我们删除字符串。

    my @array = qw(foo.com bar.net www.example.com example.com
                abc.def.ghi.foo.bar.baz.qux foo.bar.baz.qux);
    my @result = do {
        my $p;
        map scalar reverse, grep {
            my $x = !defined $p || !m/^\Q$p/;
            if($x) {
                $p = $_;
                $p .= '.' unless m/\.$/;
            }
            $x
        } sort map scalar reverse, @array;
    };
    
    use 5.10.0;
    say for @result;
    

    关于arrays - 删除冗余数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22008651/

    相关文章:

    php - 如何从 laravel 中插入的图像数组中获取单个图像?

    javascript - 尝试使用数组过滤对象时失败

    python - 程序将数组分成N个连续的子数组,使得每个子数组的和为奇数

    regex - 计算文本文件中的单个单词

    perl - 是什么导致字符串 `eval` 、代码属性和符号表之间发生意外交互?

    php - 在 PHP 中,数组和数组在类型声明上的区别是什么?

    arrays - 使用 postgresql 中的其他列更新数组类型的列

    perl - 通过值进行简单的哈希搜索

    javascript - Perl 脚本标记单选按钮并执行 javascript 按钮

    Perl - 如何转换日期?