2014-01-26 2 views
3

У меня очень длинный массив строк. Например:Создать уникальные исходные строки из массива строк

["Abyssal Specter", "Air Elemental", "Aladdin's Ring", "Ambition's Cost", "Anaba Shaman", "Angel of Mercy", "Angelic Page", "Archivist", "Ardent Militia", "Avatar of Hope", "Aven Cloudchaser","Aven Fisher"] 

Теперь этот массив должен быть передан методу, который должен вернуть

[["Abyssal Specter","Ab"], ["Air Elemental", "Ai"], ["Aladdin's Ring","Al"], ["Ambition's Cost","Am"], ["Anaba Shaman","Ana"], ["Angel of Mercy","Angel "], ["Angelic Page","Angeli"], ["Archivist","Arc"], ["Ardent Militia","Ard"], ["Avatar of Hope","Ava"], ["Aven Cloudchaser","Aven C"],["Aven Fisher","Aven F"]] 

Метод должен возвращать уникальные инициалы каждой строки в массиве.

Например, "Abyssal Specter" должен вернуть "Ab", так как нет другой строки, начинающейся с "Ab". Аналогично для "Air Elemental" - "Ai". Но "Aven Cloudchaser" должен вернуть "Aven C", так как есть строка "Aven Fisher". Короче говоря, он должен просто генерировать уникальные инициалы строк.

+0

Вы выкладываете создать все правила о том, как разрешить конфликты, если 'Aven C' уже используется, Whe следующее правило быть? –

ответ

4

Abbrev в стандартном Lib делает именно это:

require 'abbrev' 

ar = ["Abyssal Specter", "Air Elemental", "Aladdin's Ring", "Ambition's Cost", "Anaba Shaman", "Angel of Mercy", "Angelic Page", "Archivist", "Ardent Militia", "Avatar of Hope", "Aven Cloudchaser","Aven Fisher"] 
p ar.abbrev.invert.to_a 

# [["Abyssal Specter", "Ab"], ["Air Elemental", "Ai"], ["Aladdin's Ring", "Al"], ["Ambition's Cost", "Am"], ["Anaba Shaman", "Ana"], ["Angel of Mercy", "Angel "], ["Angelic Page", "Angeli"], ["Archivist", "Arc"], ["Ardent Militia", "Ard"], ["Avatar of Hope", "Ava"], ["Aven Cloudchaser", "Aven C"], ["Aven Fisher", "Aven F"]] 
+0

wow никогда не знал, что у Ruby есть такие библиотеки – Gagan

Смежные вопросы