Ruby:消除作为数组中其他字符串的子串的字符串

时间:2011-03-04 03:21:25

标签: ruby

我认为这将是一个有趣的问题。我有一个解决方案,我很好奇是否有更好的方法来做到这一点。假设你有这个数组:

names = ["on", "question", "quest"]

我想要消除作为数组中其他成员的子串的字符串。我能提出的最干净的代码是:

names.select do |name|
    names.all? { |other_name| other_name == name || other_name.match(name).nil? }
end

结果是

["question"]

我讨厌那些代码,只是看起来不像红宝石。有关更好/更有效/更简洁的方法的任何建议吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我还有一点要做。使用包括?字符串

的方法
names.select do |name|
  names.one? {|other_name| other_name.include? name}
end

答案 1 :(得分:1)

这不会更容易吗

names.select do |name|
      names.one? {|other_name|  other_name.index(name)!=nil}
end

它检查项目是否是数组中任何一个项目的一部分。