从Ienumerable中取出一个子部分

时间:2010-06-16 00:06:43

标签: ruby ruby-1.9

我经常想从Enumerable中取出一个子部分。子部分有时位于原始Enumerable实例的开头,有时是结尾,用于指定子部分的长度有时是子部分的长度,有时是其补充。这提供了四种可能性,但我只知道如何做其中三种。有办法做第四个吗?

1)获取第一个n元素:

[1, 2, 3, 4, 5].first(3) # => [1, 2, 3]    or
[1, 2, 3, 4, 5].take(3) # => [1, 2, 3]

2)删除第一个n元素:

[1, 2, 3, 4, 5].drop(3) #=> [4, 5]

3)获取最后n个元素:

[1, 2, 3, 4, 5].last(3) #=> [3, 4, 5]

4)删除最后n个元素:

[1, 2, 3, 4, 5].some_method(3) #=> [1, 2]

1 个答案:

答案 0 :(得分:2)

没有内置方法可以做到这一点,但是使用带有负索引的slice很容易:

[1, 2, 3, 4, 5][0...-3] # => [1, 2]
如果你经常这样做,你可以自己动手:

class Array
  def rdrop(n)
    self[0...-n]
  end
end

[1, 2, 3, 4, 5].rdrop(3) # => [1, 2]

注意last不是Enumerable的方法;唯一的方法rdrop可能是首先构建数组(如Enumerable#sort那样)......

相关问题