Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中用不同的字符串交换每个事件_Ruby_String_Gsub - Fatal编程技术网

在ruby中用不同的字符串交换每个事件

在ruby中用不同的字符串交换每个事件,ruby,string,gsub,Ruby,String,Gsub,我有一个按正确顺序排列的字符串数组。我想这样做: text.gsub!(/my_pattern/, array[i++]) 换句话说,我想用数组[0]交换我的_模式的第一次出现,用数组[1]交换第二次出现。有什么提示吗?接受可选块。块的返回值用作替换字符串 用于: 这应该可以做到: replacements = array.dup text.gsub!(/my_pattern/) { |_| replacements.shift || 'no replacements left' } 首先使

我有一个按正确顺序排列的字符串数组。我想这样做:

text.gsub!(/my_pattern/, array[i++])
换句话说,我想用数组[0]交换我的_模式的第一次出现,用数组[1]交换第二次出现。有什么提示吗?

接受可选块。块的返回值用作替换字符串

用于:


这应该可以做到:

replacements = array.dup
text.gsub!(/my_pattern/) { |_| replacements.shift || 'no replacements left' }
首先使用
array.dup
复制数组,因为
shift
修改数组。如果数组中的匹配项多于个元素,则该模式将替换为字符串
无替换项
。如果要在数组中没有元素时保持匹配不变,请执行以下操作:

text.gsub!(/my_pattern/) { |match| replacements.shift || match }
单向:

array = ['first', 'second', 'third', 'forth', 'fifth']
text = 'my_pattern, my_pattern, my_pattern, my_pattern'

enum = array.to_enum
text.gsub!(/my_pattern/) { enum.next }
  #=> "first, second, third, forth"
text
  #=> "first, second, third, forth"

如果在到达数组末尾时调用(即,如果要替换的字符串多于
arr
的元素),将引发
StopIterator
异常。如果您担心这种可能性,则需要
解救块中的异常
,并对其进行适当处理

@zenn1337,欢迎来到堆栈溢出!有些人试图回答你的问题。如果这对你有帮助,你可以告诉社区,这对你来说是最有用的……是的,当然可以,但不要急于这么做。有些海报在选择答案之前会等待几个小时,有时是几天,部分原因是他们不希望阻止发布更多可能更好的答案。我想你的意思是,对于每个
I=0,1,2…
,匹配的
I
第个字符串将替换为
array[I]
。是的,这正是我想做的。
array = ['first', 'second', 'third', 'forth', 'fifth']
text = 'my_pattern, my_pattern, my_pattern, my_pattern'

enum = array.to_enum
text.gsub!(/my_pattern/) { enum.next }
  #=> "first, second, third, forth"
text
  #=> "first, second, third, forth"