1

我经常想从 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]
4

1 回答 1

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做)......

于 2010-06-16T14:01:10.590 回答