gpt4 book ai didi

groovy - 嵌套映射中的叶节点

转载 作者:行者123 更新时间:2023-12-04 05:02:35 24 4
gpt4 key购买 nike

给定一个这样的嵌套 map :

def map = [group: [group_name: 'test', group_color: 'red']]

有没有办法把它变成这样:
['group-group_name': 'test', 'group-group_color': 'red']

map 可以有任何级别的嵌套。

进一步解释:如果将 map 视为一棵树,我希望生成的 map 将所有叶值作为其值,并且每个键都应该是一个“绝对”键,使用从树顶部到叶节点(在上面的示例中,所有键都使用 - 连接)。

这就是我想要的(当然不起作用):
def newMap = map.findAll { it.isLeaf() }.collect { [it.absoluteKeyPath: it.value] }

最佳答案

我相信这应该这样做:

def map = [ cheese: 'cheddar', 
group: [ group_name: 'test',
group_color: 'red',
deep:[ bool:'yes' ] ] ]

def compress( Map m, String prefix = '' ) {
prefix = prefix ? "$prefix-" : ''
m.collectEntries { k, v ->
if( v instanceof Map ) compress( v, "$prefix$k" )
else [ ("$prefix$k".toString()): v ]
}
}

assert compress( map ) == [ 'cheese':'cheddar',
'group-group_name':'test',
'group-group_color':'red',
'group-deep-bool':'yes' ]

当然,您需要小心,因为映射键已经可以包含 -字符,所以如果一个名字与叶子的路径相同,你可能会丢失数据

关于groovy - 嵌套映射中的叶节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968919/

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