Сделать @added_words
набором (не забудьте require 'set'
). Это ускоряет поиск, поскольку наборы реализованы с помощью хэшей, при этом все еще используется include?
для проверки членства в наборе. Также легко извлечь самый высокий использованный суффикс:
>> s << 'foo'
#=> #<Set: {"foo"}>
>> s << 'foo_1'
#=> #<Set: {"foo", "foo_1"}>
>> word = 'foo'
#=> "foo"
>> s.max_by { |w| w =~ /#{word}_?(\d+)?/ ; $1 || '' }
#=> "foo_1"
>> s << 'foo_12' #=>
#<Set: {"foo", "foo_1", "foo_12"}>
>> s.max_by { |w| w =~ /#{word}_?(\d+)?/ ; $1 || '' }
#=> "foo_12"
Теперь, чтобы получить следующее значение, которое вы можете вставить, вы можете просто сделать следующее (представьте, что у вас уже есть 12 foo
с, поэтому следующим должно быть foo_13
):
>> s << s.max_by { |w| w =~ /#{word}_?(\d+)?/ ; $1 || '' }.next
#=> #<Set: {"foo", "foo_1", "foo_12", "foo_13"}
Извините, если примеры немного запутаны, у меня сегодня была анестезия. Этого должно быть достаточно, чтобы дать вам представление о том, как наборы могут потенциально помочь вам (хотя большинство из них будет работать и с массивом, но наборы будут быстрее искать).