我有一个包含许多主机名的数组。我想删除这个数组的冗余元素,即:
www.example.com
和 example.com
存在,www.example.com
已移除。 已回答删除重复项 here ,但我如何实现第二个条件?
编辑:为了澄清起见,我必须提到
www.
可能不是唯一存在的东西——它也可能是 abc.def.ghi.foo.bar.baz.qux
和 foo.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/