我正在尝试从groovy列表中删除项目。我试过以下:
List<User> availableUsers = []
availableUsers = workers
for (int i = 0; i < availableUsers.size(); i++) {
if (availableUsers[i].equals(user)){
availableUsers.drop(i)
break
}
}
我也试过了:
availableUsers.remove(user)
在这两种情况下,清单都会被清空。有谁知道发生了什么事?
答案 0 :(得分:11)
你试过吗
availableUsers - user
Docu:http://groovy.codehaus.org/groovy-jdk/java/util/List.html#minus(java.lang.Object) 我自己没有太多经验,但这就是我想要的。
答案 1 :(得分:3)
Fildor是对的,但如果您只想删除列表中user
的第一次出现(减去将删除所有出现的内容),您可能需要以下内容:
list = list.indexOf( user ).with { idx ->
if( idx > -1 ) {
new ArrayList( list ).with { a ->
a.remove( idx )
a
}
}
else list
}
答案 2 :(得分:0)
我有一个相关的要求,但想知道他们的索引位置,删除多个项目。在循环中不容易,因为在删除第一个项目后,其余项目的索引位置会发生变化。首先创建一个包含要删除的项的列表似乎很容易,然后使用集合减去操作将它们从目标列表中删除。这是一个例子:
myList=['a','b','c','d']
remove=[0,1,2] //index list of list elements to remove
removeList=myList[remove]
println removeList
assert ['d']== myList.minus(removeList)
限制:如果索引中的值在目标列表中多次出现,则删除所有实例。
所以,如果
myList=['a','b','c','d','a','e']
remove=[0,1,2]
removeList=myList[remove]
assert myList.minus(removeList)== ['d','e']
结果将是d,e
答案 3 :(得分:0)
如上所述,答案取决于您是否希望删除所有出现的项目......
myList = ['a','b','c', 'c']
myList -= 'c'
assert myList == ['a','b']
......或者只是第一个实例。
myList = ['a','b','c', 'c']
myList.remove(myList.indexOf('c'))
assert myList == ['a','b','c']
我自己还是Groovy的新手,但其中一个基本原则是,它几乎总能找到让普通任务变得琐碎的单行的方法。添加或删除集合中的项目肯定是合格的。