Groovy 如何从没有最后一个元素的列表中获取所有元素?

Groovy 如何从没有最后一个元素的列表中获取所有元素?,groovy,Groovy,下面是Groovy代码 lines = ['0','1','2','3','4','5'] println lines[1..lines.size()-1] println lines[1..-1] println lines[1..<lines.size()-1] println lines[1..<-1] println lines[1..<-2] println lines[1..-2] 因为-1是列表中最后一个元

下面是Groovy代码

    lines = ['0','1','2','3','4','5']
    println lines[1..lines.size()-1]
    println lines[1..-1]
    println lines[1..<lines.size()-1]
    println lines[1..<-1]
    println lines[1..<-2]
    println lines[1..-2]
因为
-1
是列表中最后一个元素的索引,所以前两个是有意义的(Groovy中的范围包括end元素,而不是像Java中的其他地方一样省略它:-()

第3行是所需的输出(列表中没有第一个和最后一个元素)

我很担心输出#4:为什么我得到
1..-1的
[1,0]


另外,
[1,2,3,4,5]
对于范围
1..获取除最后一个元素外的所有元素的最佳方法是使用以下方法:

在大小==1的情况下,它的行为正常:

def list = ['one']
assert list.take(list.size() - 1) == []
虽然我更希望它在大小=0的情况下抛出异常,但其行为并没有那么糟糕:

def list = []
assert list.take(list.size() - 1) == []

您也可以使用
list[0..也许自从epideman写了他的答案后,情况已经发生了变化,但是您可以使用
0..获得整个列表,而不使用最后一个元素,因为Groovy 2.4您可以使用以下方法:


如果要包含除最后一个元素以外的所有元素,范围不应该从0开始而不是从1开始吗?(在您的示例中,总是排除第一个元素)在我的例子中,我也不想要第一个元素,但这不是我问题的重点。+1 FWIW、“魔术转换”和返回的
RangeInfo
对象来调用该方法
def list = ['one']
assert list.take(list.size() - 1) == []
def list = []
assert list.take(list.size() - 1) == []
assert ["foo"][0..<-1] == []
assert ["foo", "bar"][0..<-1] == ["foo"]
assert ["foo", "bar", "baz"][0..<-1] == ["foo", "bar"]


// blows up if empty, here take is better
assert [][0..<-1] == []  // BOOM

// if you want null safe, use take
assert [].take(-1) == []
lines = ['0','1','2','3','4','5']
assert lines.init() == ['0','1','2','3','4']