创建一个人类可读的列表,在ruby列表的最后一个元素之前插入“and”

你如何获取一个列表并将其变成逗号分隔的字符串,在数组的最后一个元素之前加上“和”?

采取类似的方式:

list1 = ['a','b','c'] 

把它变成这个:

 => "a, b, and c" 

我记得ruby有一个方法。 然而,我搜索过,找不到它。 谢谢您的帮助。

尝试: [list[0...-1].join(", "), list.last].join(", and ")

编辑:Rails有你可能正在寻找的方法,称为to_sentence

如果您没有Rails或者不希望依赖Rails,请打开Array类并包含上述方法,如:

 class Array def join_all(join_with = ", ", connector = "and", last_comma = false) return self.to_s if self.empty? || self.size==1 connector = join_with+connector if last_comma [list[0...-1].join(join_with), list.last].join(connector) end end 
 class Array def to_sentence sentence = self[0..-2].join(", ") + ", and " + self[-1].to_s if self.size > 1 sentence ||= self.to_s end end 

所以

 [1].to_sentence #=> "1" [1,2,3].to_sentence #=> "1, 2, and 3" [].to_sentence #=> "" 

在Rails中,这里是使用I18n语言环境的to_sentence方法

可能是更好的方法,但这可行:

 class Array def to_human_string arr = Array.new(self) last = arr.pop arr.join(", ") + ", and " + last.to_s end end 

用法:

 ['a','b','c'].to_human_string => "a, b, and c" 

您可以为分隔符添加选项,’和’以及可选的牛津逗号。