拥有代码:
def res = [:].withDefault{ 0 }
someList.each{ res[ it ] += getFreq( it ) }
我想删除值的默认值,以便调用res[ 33 ]
不插入新对。
答案 0 :(得分:0)
MapWithDefault
似乎没有代理人的访问者。大锤:res.@delegate
答案 1 :(得分:0)
就像将捐赠者分配给另一个var一样简单:
def original = [:]
def res = original.withDefault{ 0 }
someList.each{ res[ it ] += getFreq( it ) }
assert null == orininal[ 333 ]
assert 0 == res[ 333 ]
assert 0 == orininal[ 333 ]
答案 2 :(得分:0)
我意识到您正在使用withDefault()
来使+=
表达式自我初始化。但是,在这种情况下,我通常更喜欢使用elvis ?:
运算符进行初始化:
def res = [:]
res.getMetaClass().putMoreFreq = { res[ it ] = (res[ it ] ?: 0) + getFreq( it ) }
someList.each{ res.putMoreFreq(it) }
assert null == res[ 333 ]
如果您觉得这个答案没有回应,我会很乐意将其删除。
编辑:根据评论中的建议更改代码。