Ruby: исключить строки, которые являются подстрока других строк в массиве - PullRequest
1 голос
/ 04 марта 2011

Я думал, что это будет интересный вопрос для публикации. У меня есть решение, мне интересно, есть ли лучший способ сделать это. Скажем, у вас есть этот массив:

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

Я хочу исключить строки, которые являются подстрока других членов в массиве. Самый чистый код, который я мог придумать:

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

Результат

["question"]

Я ненавижу этот код, просто не похоже на рубиновый. Любые предложения о лучшем / более эффективном / более кратком способе сделать это?

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

Мне нужно сделать небольшое дополнение.Использовать включить?метод строки

names.select do |name|
  names.one? {|other_name| other_name.include? name}
end
1 голос
/ 04 марта 2011

Не проще ли?

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

Проверяется, является ли элемент частью какого-либо из элементов в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...