具有偶数索引的Ruby数组转换

时间:2014-02-21 12:11:09

标签: ruby arrays

使用以下数组:

[68, 205, 286, 347, 482]

我想生成类似的东西:

[0, 68, 68, 205, 205, 286, 286, 347, 347, 482]

在Ruby中实现这一目标的最佳方法是什么?

4 个答案:

答案 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]