Объединить содержимое массива в «английский список» - PullRequest
18 голосов
/ 11 января 2010

Мне нравится присоединяться к массиву, в результате чего получается «английский список». Например, ['one', 'two', 'three'] должно привести к 'one, two and three'.

Я написал этот код для его достижения (предполагая, что массив не пустой, что не так в моей ситуации)

if array.length == 1
  result = array[0]
else
  result = "#{array[0, array.length].join(', ')} and #{array.last}"
end

Но мне было интересно, существует ли какой-нибудь «продвинутый» метод соединения для достижения такого поведения? Или хотя бы какой-нибудь более короткий / приятный код?

Ответы [ 2 ]

41 голосов
/ 11 января 2010

Такой метод не существует в ядре Ruby.

Это было реализовано в библиотеке активной поддержки Rails, хотя:

['one', 'two', 'three'].to_sentence
#=> "one, two, and three"

Разделители можно настраивать, и он также использует Rails I18n по умолчанию.

Если вы используете ActiveSupport или Rails, это будет предпочтительным способом сделать это. Если ваше приложение не является Railsy, ​​ваша реализация кажется подходящей только для английского языка.

8 голосов
/ 11 января 2010

Так же, как подсказка читабельности. Вы можете написать

array[0...-1] 

для выбора всех элементов, кроме последнего.

Редактировать, обновлять пример кода с предложением Ника.

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