我试图过滤一个数组,我想要排除任何带有'子字符串'在数组中。 这是为了创建搜索词数组,但限制重复搜索次数。
即
[ "Rough Collie", "Alsatian", "Standard Poodle", "Poodle", "Collie", "Schnauser", "Border Collie", "Chihuahua" ]
=>
[ "Alsatian", "Poodle", "Collie", "Schnauser", "Chihuahua" ]
我们已经删除了标准贵宾犬,因为贵宾犬是匹配的粗牧羊犬和边境牧羊犬,因为牧羊犬是一个匹配。 即如果一个单词存在但在另一个术语中也作为子字符串存在,则删除较长期。
arr - arr.map { |a| arr.select { |s| s.include?(a) && s != a}}.flatten
这基本上有效,但看起来有点难看。有更优雅的方式吗?
答案 0 :(得分:3)
我建议:
arr.delete_if{|c|
arr.any? { |s| c != s && c.include?(s) }
}
arr
将在原地进行修改,因此可以节省内存分配
答案 1 :(得分:0)
另一种方式如下:
arr.uniq!
arr.reject { |ar| arr.select { |another| ar.include? another }.count >= 2 }