加入可枚举以在 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"
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"