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

Viv*_*tel 10 ruby

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

采取类似的方式:

list1 = ['a','b','c']
Run Code Online (Sandbox Code Playgroud)

把它变成这个:

=> "a, b, and c"
Run Code Online (Sandbox Code Playgroud)

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

Sor*_*row 17

试试:[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
Run Code Online (Sandbox Code Playgroud)

  • 对于非Rails人员,您可以"要求"active_support/core_ext/array/conversions'来获取to_sentence (3认同)

fl0*_*00r 7

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
Run Code Online (Sandbox Code Playgroud)

所以

[1].to_sentence
#=> "1"
[1,2,3].to_sentence
#=> "1, 2, and 3"
[].to_sentence
#=> ""
Run Code Online (Sandbox Code Playgroud)

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