Можно ли что-то наподобие map! (&: Strip) написать? - PullRequest
0 голосов
/ 17 января 2012

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

lines[3..lines.length-4].map!(&:strip).delete_if { |table_name| table_name == "" }

Ответы [ 2 ]

1 голос
/ 17 января 2012

Это не работает, потому что lines[3..lines.length-4] возвращает новый массив, а не частичную "ссылку" на старый (поэтому ваш map! просто изменяет этот новый массив на месте).

Идея:

(3..lines.length-4).each { |idx| lines[idx].strip! }
1 голос
/ 17 января 2012

Когда вы вызываете map! для lines[3..lines.length-4], этот метод вызывается не для исходного массива, а для нового, который содержит фрагмент исходного массива lines. Если вам нужно заменить часть вашего массива lines его разделенными и отфильтрованными элементами, вы можете сделать это следующим образом:

lines[3..lines.length-4] = lines[3..lines.length-4].map(&:strip).reject { |tn| tn == "" }

Здесь вы явно переопределяете фрагмент массива lines после чередования и фильтрации содержащихся в нем элементов.

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