我正在尝试过滤一个数组,我想在其中排除数组中具有“子字符串”的任何内容。 这是为了创建一组搜索词,但限制重复搜索的数量。
即
[ "Rough Collie", "Alsatian", "Standard Poodle", "Poodle", "Collie", "Schnauser", "Border Collie", "Chihuahua" ]
=>
[ "Alsatian", "Poodle", "Collie", "Schnauser", "Chihuahua" ]
我们删除了标准 Poodle ,因为 Poodle 是匹配项,而粗牧羊犬和边境牧羊犬是匹配项,因为牧羊犬是匹配项。 即,如果一个词存在但也作为另一个词的子串存在,则删除较长的词。
arr - arr.map { |a| arr.select { |s| s.include?(a) && s != a}}.flatten
这基本上可以工作,但看起来有点难看。有没有更优雅的方式来做到这一点?
最佳答案
我建议:
arr.delete_if{|c|
arr.any? { |s| c != s && c.include?(s) }
}
arr
将被原地修改,从而节省内存分配
关于arrays - 从子字符串作为另一个项目存在的数组中删除项目(超字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511759/