在Ruby中逐步将数组拆分为子数组

时间:2013-04-26 08:49:22

标签: python ruby

在Python中,我可以使用“jump-step”对数组进行切片。例如:

In [1]: a = [1,2,3,4,5,6,7,8,9] 

In [4]: a[1:7:2] # start from index = 1 to index < 7, with step = 2
Out[4]: [2, 4, 6]

Ruby能做到吗?

3 个答案:

答案 0 :(得分:6)

a = [1,2,3,4,5,6,7,8,9]
a.values_at(*(1...7).step(2)) - [nil]
#=> [2, 4, 6] 

虽然在上面的情况下- [nil]部分不是必需的,但它只是用于你的范围超过数组的大小,否则你可能会得到这样的结果:

a = [1,2,3,4,5,6,7,8,9]
a.values_at(*(1..23).step(2))
#=> [2, 4, 6, 8, nil, nil, nil, nil, nil, nil, nil, nil]

答案 1 :(得分:2)

在ruby中,获得相同的输出:

a = [1,2,3,4,5,6,7,8,9]
(1...7).step(2).map { |i| a[i] }
=> [2, 4, 6] 

答案 2 :(得分:2)

如果你真的错过了Python切片步骤语法,你可以让Ruby做一些非常相似的事情。

class Array
  alias_method :brackets, :[]

  def [](*args)
    return brackets(*args) if args.length != 3
    start, stop, step = *args
    self.values_at(*(start...stop).step(step))
  end
end

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr[1,7,2]
#=> [2, 4, 6]