list - Groovy列表移位和不移位

标签 list groovy

groovy中是否真的没有内置的方法来“移动”和“取消移动”列表? (ruby,javascript有的东西)例如:

def list = [1,2,3,4,5]
firstElement = list.shift
println firstElement          // 1
println list                  // [2,3,4,5]

list.unshift 1
println list                  // [1,2,3,4,5]


如果没有内置的方式,是否有常规的替代方法?

最佳答案

没有内置的换挡和换挡...以下是一些选项:

您可以使用队列:

def queue = [ 1, 2, 3, 4, 5 ] as Queue

def firstElement = queue.poll()

assert firstElement == 1
assert queue == [ 2, 3, 4, 5 ]


但是用offer重新添加会增加错误的结果,因此请使用offerFirst

queue.offerFirst( 1 )
assert queue == [ 1, 2, 3, 4, 5 ]


或者,您可以使用Stack,但是您需要反转列表以将1作为其第一个元素。

def stack = [ 1, 2, 3, 4, 5 ].reverse() as Stack

def firstElement = stack.pop()

assert firstElement == 1
assert stack == [ 5, 4, 3, 2 ]

stack.push( 1 )
assert stack == [ 5, 4, 3, 2, 1 ]


或者,您可以走很长一段路:

def list = [ 1, 2, 3, 4, 5 ]

(firstElement, list) = [ list.head(), list.tail() ]

assert firstElement == 1
assert list == [ 2, 3, 4, 5 ]

list.add( 0, 1 )
assert list == [ 1, 2, 3, 4, 5 ]


或者,您可以将shiftunshift添加到List的metaClass中:

List.metaClass.shift = {
    delegate.remove( 0 )
}
List.metaClass.unshift = { val ->
    delegate.add( 0, val )
    delegate
}

def list = [ 1, 2, 3, 4, 5 ]
def firstElement = list.shift()
assert firstElement == 1
assert list == [ 2, 3, 4, 5 ]

list.unshift( 1 )
assert list == [ 1, 2, 3, 4, 5 ]

关于list - Groovy列表移位和不移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22456888/

相关文章:

c# - 将字符串转换为列表 - C#

python - 当项目已存在以及使用 for 循环时将其添加到列表中

c - 如何将链表从一个文件传递到同一项目中的另一个文件?

groovy - 通过 groovy 在文件行尾添加单词

grails - 如何在grails中将ilike与Integer一起使用

sharepoint - 是否可以从 Excel 工作表填充 SharePoint 列表?

python - del运算符如何在python中的列表中工作?

scripting - 在应用程序中使用 Groovy 脚本的最佳方法

javascript - 在 Grails 的 JavaScript 源代码中执行 groovy 语句

java - 如何在 Java/Groovy 中开发数据透视表