Групповые строки с похожим рисунком в Ruby - PullRequest
3 голосов
/ 28 мая 2011

У меня есть массив имен файлов. Подмножество их может иметь похожий шаблон (строки алфавита с числом в конце):

arr = %w[
  WordWord1.html
  WordWord3.html
  WordWord10.html
  WordWord11.html
  AnotherWord1.html
  AnotherWord2.html
  FileFile.html
]

Как идентифицировать похожие (они имеют одинаковую подстроку, отличаются только их номера) и переместить их в массив?

['WordWord1.html', 'WordWord3.html', 'WordWord10.html', 'WordWord11.html']
['AnotherWord1.html', 'AnotherWord2.html']
['FileFile.html']

Ответы [ 3 ]

6 голосов
/ 28 мая 2011
arr.group_by { |x| x[/[a-zA-Z]+/] }.values
3 голосов
/ 28 мая 2011
filenames = ["WordWord1.html", "WordWord3.html", "WordWord10.html", "WordWord11.html", "AnotherWord1.html", "AnotherWord2.html", "FileFile.html"]
filenames.inject({}){|h,f|k = f.split(/[^a-zA-Z]/, 2).first;h[k] ||= [];h[k] << f; h}
2 голосов
/ 28 мая 2011
arr = %w[
  WordWord1.html
  WordWord3.html
  WordWord10.html
  WordWord11.html
  AnotherWord1.html
  AnotherWord2.html
  FileFile.html
]

result = {}

arr.each do |a|
  prefix = a.match(/[A-Za-z]+/).to_s
  if result[prefix]
    result[prefix] << a
  else
    result[prefix] = [a]
  end
end

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