在ruby中用索引同时替换多个子字符串

在ruby中用索引同时替换多个子字符串,ruby,Ruby,这是一个类似的问题,即给定一个子字符串的开始和结束索引,用另一个字符串替换它,但我想用索引替换几个子字符串。我不能只是链替换,因为索引引用原始字符串。所以我最后数了数字符,但一定有更好的方法 res = original_string delta = 0 # to keep things simple, assume replacements just contains objects which have start, end indices and replacements replacem

这是一个类似的问题,即给定一个子字符串的开始和结束索引,用另一个字符串替换它,但我想用索引替换几个子字符串。我不能只是链替换,因为索引引用原始字符串。所以我最后数了数字符,但一定有更好的方法

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

从最后开始更换。那么索引总是有效的:

# 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