Reputation: 1370
I'm a bit stuck here, creating a map like this i straight forward
def map = [[group="group1",member="groover"],
[group="group1",member="jason"],
[group="group2",member="groover"],
[group="group2",member="jason"]
]
iterating over it and printing..
map.each{
println it
}
.. (DESIRED) OUTPUT:
[group1, groover]
[group1, jason]
[group2, groover]
[group2, jason]
Now, how to create a similar map dynamically?
def dynamicMap = [:]
for(int i=1;i<3;i++){ // This is not working particulary well...
dynamicMap.group= "group$i"
dynamicMap.member= "groover"
dynamicMap.member= "jason"
}
dynamicMap.each{
println it
}
(INCORRECT) OUTPUT
group=group2
member=jason
Upvotes: 0
Views: 2095
Reputation: 3058
Caveat, combinations()
only works in 2.2.0+, I believe. Pre 2.2.0 example at the end. (I was also unclear if you want a list of maps or a list of lists.)
def groups = [ "group1", "group2"]
def members = [ "groover", "jason" ]
def list = [groups, members].combinations { g, m -> ["group": g, "member": m] }
list.each { println it }
// Gives:
//[group:group1, member:groover]
//[group:group2, member:groover]
//[group:group1, member:jason]
//[group:group2, member:jason]
// OR
list = [groups, members].combinations { g, m -> [g, m] }
list.each { println it }
// Gives:
//[group1, groover]
//[group2, groover]
//[group1, jason]
//[group2, jason]
// But if you don't actually need the resulting list of lists
// (i.e. you just want to process the combinations)
[groups, members].eachCombination { println it }
// Gives:
//[group1, groover]
//[group2, groover]
//[group1, jason]
//[group2, jason]
// OR (Should work pre-2.2.0+)
list = []
groups.each { g ->
members.each { m -> list << [g, m] /* or ["group": g, "member": m] */ }
}
list.each { println it }
// Gives:
//[group1, groover]
//[group2, groover]
//[group1, jason]
//[group2, jason]
Upvotes: 0
Reputation: 171054
That's a list of maps, not a map, but:
def dynamicMap = (1..2).collectMany { n ->
[ [ group:"group$n", member:'groover' ],
[ group:"group$n", member:'jason' ] ]
}
Upvotes: 3
Reputation: 828
First of all, your map isn't really map. It's a list of maps.
The solutions you're looking for is
def dynamicMap = []
for(int i=1;i<3;i++){
dynamicMap << [group: "group$i", member: "groover"]
dynamicMap << [group: "group$i", member: "jason"]
}
Upvotes: 2