在ruby中一次用索引替换几个子串

dim*_*mid -1 ruby

这是一个类似的问题这一个,即给定字符串的开始和结束索引,用另一个字符串替换它,但我想,以取代使用指标数子.我不能只链接替换,因为索引引用原始字符串.所以我最终计算了字数,但必须有更好的方法.

res = original_string
delta = 0
# to keep things simple, assume replacements just contains objects which have start, end indices and replacements
replacements.each do |r|
  old_str = original_str[r.start_offset .. r.end_offset]
  new_str = r.replacement
  res[r.start_offset + delta .. r.end_offset + delta] = new_str
  delta += new_str.size - old_str.size
end
Run Code Online (Sandbox Code Playgroud)

spi*_*ann 5

刚开始从最后更换.然后索引始终有效:

# to keep things simple, assume replacements just contains 
# objects which have start, end indices and replacements
replacements.sort_by(&:start_offset).reverse.each do |r|
  string[r.start_offset..r.end_offset] = r.replacement      
end
Run Code Online (Sandbox Code Playgroud)