Функция Руби присоединиться к массив с запятыми и связи


Следует принимать массив как ['собака', 'кошка', 'птица', 'обезьяна'] и вернуться 'собаки, кошки, птицы и обезьяны'.

Ищу более элегантное решение.

def self.english_join(array)
  return nil if array.nil?
  return array[0] if array.length == 1
  return array[0..-2].join(', ') + " and " + array[-1] if array.length > 1
end


17235
11
задан 7 ноября 2011 в 10:11 Источник Поделиться
Комментарии
3 ответа

Рельсы (на самом деле ActiveSupport, часть рельсов базы) предлагает очень хороший массив#to_sentence способ.

Если вы используете рельсы или ActiveSupport, вы можете позвонить

['dog', 'cat', 'bird', 'monkey'].to_sentence
# => "dog, cat, bird, and monkey"

Метод автоматически настраивается в соответствии с параметрами названием i18n. Например, в Италии вы должны опустить последней запятой перед и.

['dog', 'cat', 'bird', 'monkey'].to_sentence
# => "dog, cat, bird e monkey"

Если вы хотите что-то вне зависимости от ActiveSupport, вы можете начать использовать метод исходный код.

Это просто пример

class Array
def to_sentence
default_words_connector = ", "
default_two_words_connector = " and "
default_last_word_connector = ", and "

case length
when 0
""
when 1
self[0].to_s.dup
when 2
"#{self[0]}#{options[:two_words_connector]}#{self[1]}"
else
"#{self[0...-1].join(options[:words_connector])}#{options[:last_word_connector]}#{self[-1]}"
end
end
end

22
ответ дан 8 ноября 2011 в 01:11 Источник Поделиться

def english_join(array = nil)
return array.to_s if array.nil? or array.length <= 1
array[0..-2].join(", ") + " and " + array[-1]
end

Похожий, но разный подход. Совместная присоединения фрагмента массива со строкой дописать, чтобы получить последние "и" часть.

4
ответ дан 7 ноября 2011 в 11:11 Источник Поделиться

def self.english_join(array = nil)
return array.to_s if array.nil? or array.length <= 1
array[-1] = "and #{array[-1]}"
array.join(', ')
end

Другим способом, но не намного лучше. Возвращает пустую строку вместо нуля , если массив пуст. Кто-то будет вступать в сладкий to_sentence способ.

2
ответ дан 7 ноября 2011 в 11:11 Источник Поделиться