Как вставить префикс для всех элементов массива, кроме первого и последнего? - PullRequest
1 голос
/ 19 декабря 2011

Как добавить префикс ко всем элементам массива, кроме первого и последнего?

Есть ли однострочное решение для этого? Или более приятное решение, чем у меня?

result = ["svn up", "20111128025010", "20111128025022", "pass"]
for i in 1..result.length-2
  result[i]=" - "+result[i]
end

Ответы [ 2 ]

8 голосов
/ 19 декабря 2011

Вы можете сделать это так:

result[1 ... -1].each { |s| s[0, 0] = ' - ' }

Обратите внимание, что есть три точки, а не две.Это работает, потому что s[0,0] изменяет s на месте.Если вы используете 1.9.3+, вы также можете (и, вероятно, должны) использовать prepend:

result[1 ... -1].each { |s| s.prepend(' - ') }

И, как Жестянщик примечания в комментариях, вы также можете использовать оператор диапазона двойных точек, который является более распространенным:

result[1 .. -2].each { |s| s[0, 0] = ' - ' }
result[1 .. -2].each { |s| s.prepend(' - ') }

Какой оператор диапазона вы используете, вопрос предпочтения.

4 голосов
/ 20 декабря 2011

Также возможно сделать это так:

result = ["svn up", "20111128025010", "20111128025022", "pass"]

result[1..-2].map { |s| s.insert(0, '-') }

p result #=> ["svn up", "-20111128025010", "-20111128025022", "pass"]

См. ri String#insert

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