2

我有一个包含 10 个元素的 ruby​​ 数组,我想返回除第 5 个元素之外的所有元素。

a = *(1..10)

我希望能够做类似的事情

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

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

a[-4]

这样做,但这不起作用。(我也没有尝试过任何更聪明的方法,比如获取元素索引数组)。在红宝石中做到这一点的最佳方法是什么?

4

3 回答 3

5

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

所以你可以用它作为

a.values_at(0..3, 5..9)
于 2012-08-21T23:29:56.427 回答
4

不需要黑魔法:

a[0..3] + a[5..9]
于 2012-08-21T23:25:18.167 回答
1

查看下面的文档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]

但是,正如评论者指出的那样,这会改变原始数组,这可能不是 OP 想要的!如果这是一个问题,请这样写:

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

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

于 2012-08-21T23:29:54.057 回答