在 Perl 中,我想从数组中删除所有元素,其中同一数组的另一个元素是所述元素的非空子字符串。
假设我有数组
@itemlist = ("abcde", "ab", "khi", "jklm");
在本例中,我希望删除元素 "abcde"
,因为 "ab"
是 "abcde"
的子字符串.
我可以复制数组(也许作为散列?),对其进行迭代,尝试对原始数组的每个元素进行索引并将其删除,但必须有一种更优雅的方法,不是吗?
感谢您的帮助!
为清楚起见进行了一些编辑。
最佳答案
您可以从所有项目构建一个正则表达式并丢弃任何匹配的内容:
$alternation = join('|', map(quotemeta, @itemlist));
@itemlist = grep !/($alternation).|.($alternation)/, @itemlist;
().|.()
只是确保某个项目与自身不匹配。
关于arrays - 从数组中删除其子字符串本身就是数组元素的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382399/