Groovy: 在代码中动态创建嵌套/合并地图
Groovy: Dynamically create nested / combine maps in code
我正尝试在代码中动态创建嵌套地图,如下所示。
def people = [
[name: 'Ash', age: '21', gender: 'm'],
[name: 'Jo', age: '22', gender: 'f'],
[name: 'etc.', age: '42', gender: 'f']
]
所以我可以像下面这样搜索它
person = people.findAll {item ->
item.gender == 'm' &&
item.age == '21'}
我的问题是,虽然我可以在代码中动态创建一维地图,但我不知道如何在代码中动态组合地图以创建嵌套地图,例如假设我在代码中创建了两个映射 name1 和 name2。如何将它们添加到 people map 以便它们像上面的示例一样嵌套?
def people = [:]
def name1 = [name:'ash', age:'21', gender:'m']
def name2 = [name:'Jo', age:'22', gender:'f']
我搜索/尝试了很多帖子都没有成功。下面很接近,但不起作用:(
people.put((),(name1))
people.put((),(name2))
在您的示例中,people
是地图列表,而不是嵌套地图
所以你可以简单地做:
def people = []
def name1 = [name:'ash', age:'21', gender:'m']
def name2 = [name:'Jo', age:'22', gender:'f']
然后:
people += name1
people += name2
或者在一行中定义:
def people = [name1, name2]
我正尝试在代码中动态创建嵌套地图,如下所示。
def people = [
[name: 'Ash', age: '21', gender: 'm'],
[name: 'Jo', age: '22', gender: 'f'],
[name: 'etc.', age: '42', gender: 'f']
]
所以我可以像下面这样搜索它
person = people.findAll {item ->
item.gender == 'm' &&
item.age == '21'}
我的问题是,虽然我可以在代码中动态创建一维地图,但我不知道如何在代码中动态组合地图以创建嵌套地图,例如假设我在代码中创建了两个映射 name1 和 name2。如何将它们添加到 people map 以便它们像上面的示例一样嵌套?
def people = [:]
def name1 = [name:'ash', age:'21', gender:'m']
def name2 = [name:'Jo', age:'22', gender:'f']
我搜索/尝试了很多帖子都没有成功。下面很接近,但不起作用:(
people.put((),(name1))
people.put((),(name2))
在您的示例中,people
是地图列表,而不是嵌套地图
所以你可以简单地做:
def people = []
def name1 = [name:'ash', age:'21', gender:'m']
def name2 = [name:'Jo', age:'22', gender:'f']
然后:
people += name1
people += name2
或者在一行中定义:
def people = [name1, name2]