5

我通过<<在循环中使用运算符准备了一个巨大的字符串。最后我想删除最后 2 个字符。

some_loop
  str << something
end
str = str[0..-3]

我认为上面的最后一个操作也会消耗内存和时间,但我不确定。我只是想看看是否有相反效果的操作, <<所以我可以从同一个字符串中删除最后两个字符。

4

3 回答 3

8

事实上,字符串切片已经是一种快速且节省内存的操作,因为直到真正需要时才复制字符串内容。

请参阅“ Seeing double: Ruby 如何共享字符串值”中的详细说明。

请注意,这是对字符串操作的某种经典优化;你在 java 中也有它,我们经常在 C 中使用类似的技巧。

所以,不要犹豫:

str = str[0..-3]

这是正确、推荐和有效的方法,前提是您确实必须删除这些字符,请参阅 Sergio 的回答。

于 2012-08-20T09:27:09.817 回答
3

您是否有机会使用分隔符连接一些数组元素?像这样的东西?

names = ['Mary', 'John', 'Dave']

res = ''
names.each do |n|
  res << n << ', '
end

res # => 'Mary, John, Dave, '

如果是,那么有更简单的路径。

names.join(', ') # => 'Mary, John, Dave'
于 2012-08-20T09:26:29.980 回答
1

如果最后两个字符是换行符/换行符 (CR/LF),您可以使用String.chomp(或者String#chomp!如果您想修改字符串)。

否则你可以使用:

2.times{ string.chop! }

或者

string.chop!
string.chop!
于 2012-08-20T09:36:32.130 回答