我有一个包含 10 个元素的 ruby 数组,我想返回除第 5 个元素之外的所有元素。
a = *(1..10)
我希望能够做类似的事情
a[0..3 + 5..9]
甚至更好的东西(借用 R 语法),
a[-4]
这样做,但这不起作用。(我也没有尝试过任何更聪明的方法,比如获取元素索引数组)。在红宝石中做到这一点的最佳方法是什么?
您可以使用values_at
:http ://www.ruby-doc.org/core-1.9.3/Array.html#method-i-values_at
所以你可以用它作为
a.values_at(0..3, 5..9)
不需要黑魔法:
a[0..3] + a[5..9]
查看下面的文档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 个元素的数组),同时保持原始数组不变。