Подтвердить что ты не робот

Присоедините содержимое массива в "английский список"

Мне нравится присоединяться к массиву, что приводит к "английскому списку". Например, ['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

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

4b9b3361

Ответ 1

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

реализовано в библиотеке активной поддержки Rails:

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

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

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

Ответ 2

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

array[0...-1] 

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

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