从子数组作为另一项存在的数组中删除项(超弦)

时间:2015-12-29 13:08:11

标签: arrays ruby string

我试图过滤一个数组,我想要排除任何带有'子字符串'在数组中。 这是为了创建搜索词数组,但限制重复搜索次数。

[ "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

这基本上有效,但看起来有点难看。有更优雅的方式吗?

2 个答案:

答案 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 }