索引ruby数组以省略元素或元素范围?

时间:2012-08-21 23:20:53

标签: ruby arrays

我有一个ruby数组,例如10个元素,我想要返回除第5个元素以外的所有元素。

a = *(1..10)

我希望能够做一些像

这样的事情
a[0..3 + 5..9]

甚至更好的东西(借用R语法),

a[-4]

要做到这一点,但这不起作用。 (也没有做任何更聪明的事情,我试过得到一个元素索引数组)。在ruby中执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

您可以使用values_athttp://www.ruby-doc.org/core-1.9.3/Array.html#method-i-values_at

因此您可以将其用作

a.values_at(0..3, 5..9)

答案 1 :(得分:3)

不需要黑魔法:

a[0..3] + a[5..9]

答案 2 :(得分:0)

查看Array#delete_at

下的文档

例如,myarray.delete_at(5)导致数组缺少元素5(当然,从0开始计算)。

示例:

class Array
  def without(n)
    self.delete_at(n)
    return self
  end
end
arr = [1, 2, 3, 4]
p arr.without(1) #=> [1, 3, 4]

但是,正如评论者指出的那样,这会改变原始阵列,这可能不是O.P.想要的!如果这是一个问题,请按以下方式编写:

class Array
  def without(n)
    arr2 = Array.new(self)
    arr2.delete_at(n)
    return arr2
  end
end

返回所需的数组(缺少原始第n个元素的数组),同时保持原始数组不变。