Ruby元素匹配

Ruby元素匹配,ruby,Ruby,我试图找到字符串变量的第一个和第二个实例的索引。我希望能够使用任何预定义的字符串变量,但当我尝试这样做时,它会给我一个错误。我希望能够声明多个字符串变量,如ss、aa、ff等,并使用它们代替xx。有人能帮我吗 #aa is a predefined array xx = "--help--" find_xx_instance = aa.each_with_index.select{|i,idx| i =~ /xx/} #/--help--/works but

我试图找到字符串变量的第一个和第二个实例的索引。我希望能够使用任何预定义的字符串变量,但当我尝试这样做时,它会给我一个错误。我希望能够声明多个字符串变量,如ss、aa、ff等,并使用它们代替xx。有人能帮我吗

    #aa is a predefined array 
    xx = "--help--"
    find_xx_instance = aa.each_with_index.select{|i,idx| i =~ /xx/} 
    #/--help--/works but not /xx/

    find_xx_instance.map! {|i| i[1]}

    #gives me info between the first two instances of string
    puts aa[find_xx_instance[0]+1..find_xx_instance[1]-1]

据我所知,您只需要将变量传递给正则表达式。试试这个:

find_xx_instance = aa.each_with_index.select{|i,idx| i =~ /#{xx}/}

我假设您得到一个字符串数组,
arr
、一个字符串
str
、一个整数
n
,并希望返回一个数组
a
,其中
I
arr
str
的第I+1个实例的索引

例如:

arr = %w| Now is the time for the Zorgs to attack the Borgs |
  #=> ["Now", "is", "the", "time", "for", "the", "Zorgs", "to", "attack", "the", "Borgs"] 
str = "the"
nbr = 2
这是一种方式:

b = arr.each_index.select { |i| arr[i]==str }
  #=> [2, 5, 9] 
b.first(nbr) 
  #=> [2, 5]
哪些是可以写的

arr.each_index.select { |i| arr[i]==str }.first(nbr) 
对于像这样的小问题,这很好,但是如果
arr
很大,最好在找到
str
nbr
实例后终止计算。我们可以通过创建一个:

下面是第二个示例,它清楚地说明了在
arr
中找到
nbr
字符串
str
后,
lazy
正在停止计算:

(0..Float::INFINITY).lazy.select { |i| arr[i] == str }.first(nbr)
  #=> [2, 5]

我认为这个问题有很多模棱两可之处。源代码似乎在几个方面与文本段落和问题无关。请测试每一行代码,看看哪一行是第一个以意外方式运行的代码。给我们一个
aa
的小样本数组。请准确解释第一次作业后的每一行应该做什么。@MartijnPieters,我不知道我贴了一个重复的答案。谢谢你删除它并让我知道。
(0..Float::INFINITY).lazy.select { |i| arr[i] == str }.first(nbr)
  #=> [2, 5]