将数组内容加入"英语列表"

Veg*_*ger 18 ruby arrays

我想加入一个数组,产生一个'英文列表'.例如['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
Run Code Online (Sandbox Code Playgroud)

但我想知道是否存在一些'高级'连接方法来实现这种行为?或者至少一些更短/更好的代码?

mol*_*olf 43

核心Ruby中不存在这样的方法.

实施在Rails的主动支持库,但是:

['one', 'two', 'three'].to_sentence
#=> "one, two, and three"
Run Code Online (Sandbox Code Playgroud)

分隔符是可配置的,默认情况下它也使用Rails的I18n.

如果您使用ActiveSupport或Rails,这将是首选方法.如果您的应用程序是非Railsy,那么您的实现似乎只适用于英语.

  • F!@#k我爱Rails。 (2认同)

aku*_*uhn 8

就像可读性暗示一样.你可以写

array[0...-1] 
Run Code Online (Sandbox Code Playgroud)

选择除最后一个元素之外的所有元素

使用Nick的建议编辑,更新代码示例.