使用以下数组:
[68, 205, 286, 347, 482]
我想生成类似的东西:
[0, 68, 68, 205, 205, 286, 286, 347, 347, 482]
在Ruby中实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
如果我猜对了,你想一次用两个相邻的元素迭代数组。那是each_cons
:
a = [68, 205, 286, 347, 482]
a.each_cons(2) do |x, y|
p [x, y]
end
# [68, 205]
# [205, 286]
# [286, 347]
# [347, 482]
答案 1 :(得分:2)
您实际上是在寻找通过Array
配对值的工作,来处理数组“加点”所暗示的值范围吗?这不是你如何表达问题,而是你输出的隐含属性:
([0]+a).each_cons(2).to_a
=> [[0, 68], [68, 205], [205, 286], [286, 347], [347, 482]]
然后你会像这样处理起点和终点:
([0]+a).each_cons(2) do |x,y|
# x is 0, y is 68 for first iteration
# So you could have (x...y) as a Range for example
end
或者,如果您确实将示例输出作为所需的最终结果,请将其展平:
([0]+a).each_cons(2).to_a.flatten
=> [0, 68, 68, 205, 205, 286, 286, 347, 347, 482]
答案 2 :(得分:0)
a = [68, 205, 286, 347, 482]
a = a.zip(a.dup).unshift(0).flatten
a.pop
puts a
# => [0, 68, 68, 205, 205, 286, 286, 347, 347, 482]
答案 3 :(得分:0)
正如其他人所说,逻辑并不是很清楚。我会写这样的东西:
array = [68, 205, 286, 347, 482]
first, *middle, last = [0], *array
p first + middle.flat_map{|x|[x,x]} << last
# => [0, 68, 68, 205, 205, 286, 286, 347, 347, 482]