Ruby 当一行中的3个字符相等时,什么时候有办法对数组进行切片?
我试图解决的一个问题是,取一个数字,然后找出它在一行中有3个数字。我尝试了两种方法,但都没有按计划进行 在数字451999277中,999将是一行中的三个数字和所需的输出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
#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