arrays - 从子字符串作为另一个项目存在的数组中删除项目(超字符串)

标签 arrays ruby string

我正在尝试过滤一个数组,我想在其中排除数组中具有“子字符串”的任何内容。 这是为了创建一组搜索词,但限制重复搜索的数量。

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

相关文章:

arrays - 在 Swift 中将 NSArray 转换为 Array 会对数组值产生 nil

ruby - 如何将基于 jruby 的应用程序转换为 ruby​​?

ruby - 如何将正则表达式限制为较小的捕获

javascript - 应用程序脚本中的 "Missing ) after argument list."

python - for循环中不同大小数组的函数

javascript - 检查数组是否包含另一个数组的所有元素

ruby-on-rails - url末尾传多个参数时如何获取具体数据?

替换多个字符的 Pythonic 方式

c++ - 字符串相乘的有效方法

C - 将 float 存储到 char 数组并反转