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