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 ]
或者,您可以将
shift
和unshift
添加到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/