gpt4 book ai didi

groovy - 迭代时从映射中删除键/值

转载 作者:行者123 更新时间:2023-12-02 06:37:05 27 4
gpt4 key购买 nike

我正在创建这样的 map :

def myMap = [:]

映射基本上是一个键的对象和一个值的整数。当我迭代 map 时,我会计算该值,如果它是 0,我会将其删除。我已经尝试过 myMap.remove(),但我得到了 ConcurrentModificationError - 这很公平。因此,我继续使用 it.remove(),这给了我奇怪的结果。

基本上,我的代码是这样的:

myMap.each {
it.value--;

if( it.value <= 0 )
it.remove();
}

足够简单。我的问题是,如果我在删除之前和之后打印 myMap.size() ,它们是相同的。如果我调用 myMap.containsKey( key ),它会给出 true, key 仍然在那里。

但是,如果我像这样打印 map :

myMap.each { System.out.println( "$it.key: $it.value" ); }

我什么也没得到,调用 myMap.keySet()myMap.values() 返回空。

有人知道这是怎么回事吗?

最佳答案

这应该比 Tim's answer 更有效一些(因为您只需要迭代 map 一次)。不幸的是,它也相当冗长

def map = [2:1, 3:4]
def iterator = map.entrySet().iterator()

while (iterator.hasNext()) {

if (iterator.next().value - 1 <= 0) {
iterator.remove()
}
}

// test that it worked
assert map == [3:4]

关于groovy - 迭代时从映射中删除键/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672262/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com