Ruby 当一行中的3个字符相等时,什么时候有办法对数组进行切片?

Ruby 当一行中的3个字符相等时,什么时候有办法对数组进行切片?,ruby,Ruby,我试图解决的一个问题是,取一个数字,然后找出它在一行中有3个数字。我尝试了两种方法,但都没有按计划进行 在数字451999277中,999将是一行中的三个数字和所需的输出 #first bit of code worked for 451999277, but did not work with the number 10560002 #which should return 000 but I am left with an empty array [] array2 = [] array

我试图解决的一个问题是,取一个数字,然后找出它在一行中有3个数字。我尝试了两种方法,但都没有按计划进行

在数字451999277中,999将是一行中的三个数字和所需的输出

#first bit of code worked for 451999277, but did not work with the number 10560002 
#which should return 000 but I am left with an empty array []

array2 = []
array = num1.to_s.chars
array.map {|x| array2 << x if x == array[array.index(x) + 1] && x == array[array.index(x) + 2]}


#I then tried to use .slice_when which also did not work.

num1.to_s.chars.slice_when{ |x, y, z| x == y && x == z}.to_a
#第一位代码适用于451999277,但不适用于10560002
#它应该返回000,但我只剩下一个空数组[]
array2=[]
数组=num1.to_.chars
array.map{| x | array2
  • chunk
    查找计算结果相同的连续元素
  • 选择
    允许您仅获取长度为3的子序列
  • chunk
    查找计算结果相同的连续元素
  • 选择
    允许您仅获取长度为3的子序列
步骤如下

s = n.to_s
  #=> "239994566666" 
b = s.scan(r)
  #=> [["9", "99"], ["6", "6666"]] 
b.map { |a| a.join.to_i }
  #=> [999, 66666] 
请参阅文档,特别是捕获组的处理。需要捕获组1来捕获要重复的第一个数字。为了使扫描返回
\1{2,}
,我们需要将其放在第二个捕获组中

num.to_s.split('').each_cons(3){|x,y,z| print x,y,z if x==y && y==z }

#if num = 451999277 => output: 999
#if num = 10560002 => output: 000
步骤如下

s = n.to_s
  #=> "239994566666" 
b = s.scan(r)
  #=> [["9", "99"], ["6", "6666"]] 
b.map { |a| a.join.to_i }
  #=> [999, 66666] 
请参阅文档,特别是捕获组的处理。需要捕获组1来捕获要重复的第一个数字。为了使扫描返回
\1{2,}
,我们需要将其放在第二个捕获组中

num.to_s.split('').each_cons(3){|x,y,z| print x,y,z if x==y && y==z }

#if num = 451999277 => output: 999
#if num = 10560002 => output: 000
首先,在数组中拆分num#
num.to_.split(“”)
=>[“4”、“5”、“1”、“9”、“9”、“9”、“2”、“7”、“7”]

获取3个值#
num.to_.s.split('')。每个值(3)
=>4515191999929277

并打印一对3,其中所有值都相等=>999

注意:如果在函数中使用return,则可以使用return而不是print

首先,在数组中拆分num#
num.to_.split(“”)
=>[“4”、“5”、“1”、“9”、“9”、“9”、“2”、“7”、“7”]

获取3个值#
num.to_.s.split('')。每个值(3)
=>4515191999929277

并打印一对3,其中所有值都相等=>999


注意:如果在函数中使用return,则可以使用return而不是print。

“…并在一行中有3个数字时进行查找。”这需要澄清。首先,答案是
true
false
。您是这样做的,还是希望所有符合条件的子字符串?其次,我相信您指的是同一行中的三个数字(例如,
444
,而
232323
包含同一行中的三个数字)。您希望一行中正好有三个数字是同一个数字,还是三个或更多?这可能看起来很挑剔,但在设置代码规范时精确是至关重要的。“…并查找它在一行中何时有三个数字。”这需要澄清。首先,答案是
true
false
。您是这样做的,还是希望所有符合条件的子字符串?其次,我相信您指的是同一行中的三个数字(例如,
444
,而
232323
包含同一行中的三个数字)。您希望一行中正好有三个数字是同一个数字,还是三个或更多?这似乎很挑剔,但在制定代码规范时,精确是至关重要的。
num.to_s.split('').each_cons(3){|x,y,z| print x,y,z if x==y && y==z }

#if num = 451999277 => output: 999
#if num = 10560002 => output: 000