加入可枚举以在 Ruby 中生成字符串

join enumerable to produce string in Ruby

Ruby 数组具有 #join 方法,该方法通过连接数组元素并添加可选分隔符来生成字符串。

范围等其他可枚举值没有相同的方法。

您可以使用 #inject 模拟行为,例如

('a'..'z').inject('') do |acc, s| 
  if acc.empty?
    s
  else
    acc << ' some separator ' << s.to_s  
  end
end

有没有更好的加入可枚举的方法? #join 是否因特殊原因被遗漏?

编辑:

我会担心的一件事是将大量可枚举对象复制到数组。当然,这很少是一个用例,但仍然如此。例如:

(1 .. 1_000_000_000_000_000).to_a.join

因此,我对不需要生成包含所有值的数组作为中间步骤的解决方案特别感兴趣。

使用Array#join:

('a'..'z').to_a.join(' some separator ')

或(效果相同):

[*'a'..'z'].join(' some separator ')
> [*'a'..'z'] * ' some separator '

#=> "a some separator b some separator c some separator d some separator e some separator f some separator g some separator h some separator i some separator j some separator k some separator l some separator m some separator n some separator o some separator p some separator q some separator r some separator s some separator t some separator u some separator v some separator w some separator x some separator y some separator z"