2017-02-06 3 views
0

Я хочу, чтобы заменить элемент в массиве:Как заменить один элемент в массиве потенциально несколькими элементами?

arr = ["55", "4.ARTHUR", "masddf"] 

с потенциально нескольких элементов на основе, соответствует ли это регулярное выражение. Я хотел бы иметь результат:

["55", "4.", "ARTHUR", "masddf"] 

Я пробовал:

arr.map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? } : o } 
# => ["55", ["4.", "ARTHUR"], "masddf"] 

arr.map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? }.flatten : o } 
# => ["55", ["4.", "ARTHUR"], "masddf"] 

Я не могу показаться, чтобы получить элементы вне массива они разделились на. Любые идеи?

ответ

3

Использование flat_map вместо:

arr = ["55", "4.ARTHUR", "masddf"] 
arr.flat_map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? } : o } 
# => ["55", "4.", "ARTHUR", "masddf"] 

Посмотри на repl.it: https://repl.it/F90V

Кстати, более простой способ решения этой проблемы является использование String#scan:

arr.flat_map {|o| o.scan(/^\d+\.|.+/) } 

См. Его на repl.it: https://repl.it/F90V/1

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