UnDendo withDefault()

时间:2014-10-14 11:01:17

标签: collections groovy

拥有代码:

def res = [:].withDefault{ 0 }
someList.each{ res[ it ] += getFreq( it ) }

我想删除值的默认值,以便调用res[ 33 ]不插入新对。

3 个答案:

答案 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 ]

如果您觉得这个答案没有回应,我会很乐意将其删除。

编辑:根据评论中的建议更改代码。