你能帮我找出下面地图中的简单删除中的错误之处(注意下面的输出)吗?
public class Issue {
...
def allButThis() {
println "allButThis ..."
def all = Issue.list()
println "all is ${all}"
all.remove(this.id)
println "all with ${this.id} removed: ${all}"
return all
}
String toString() {return "${id}: ${title}"}当我运行此命令时,我得到了以下结果,即项2未按预期删除
allButThis ...
all is [1: Issue-1, 2: Issue-2, 3: Issue-3]
all with 2 removed: [1: Issue-1, 2: Issue-2, 3: Issue-3]据我所知,这个删除应该是有效的,例如http://groovy.codehaus.org/JN1035-Maps,其中“删除”被描述为页面下方的三分之一。
我使用的是Grails 1.3.7。
谢谢
附言:我添加了我的toString()方法(上面),也许我欺骗了自己。
我删除了我的toString()方法,并遵循Rob的解决方案,即:
all.remove(this)
println "all with ${this} removed: ${all}"这会产生:
all is [momentum.Issue : 1, momentum.Issue : 2, momentum.Issue : 3]
all with momentum.Issue : 2 removed: [momentum.Issue : 1, momentum.Issue : 3]发布于 2011-11-09 04:11:10
this.id的类型为Long,因此,如果要删除第n项,则需要将其转换为整数。但是,这非常危险,因为id的条目并不总是第n个条目。使用.findAll({it.id != this.id})删除此项目会更省钱。
在这种情况下,我建议您这样做:
def allExceptThis = Issue.withCriteria {
ne("id", this.id)
}.list();发布于 2011-11-09 04:03:01
def all = Issue.list()这是一个列表,不是地图。
因此,要从该列表中删除:
all.remove(this)而不是。
https://stackoverflow.com/questions/8056336
复制相似问题