очень простой Groovy, карта и закрытие вопроса, но что я делаю не так - PullRequest
2 голосов
/ 14 сентября 2010

Это нормально

def variables=[
              ['var1':'test1'],
              ['var2':'test2'],
              ['var3':'test3']
              ]

println "${variables.size()}" 
variables.each{entry ->   
  println "${entry} "   
}

Я получил:

3
[var1:test1] 
[var2:test2] 
[var3:test3] 

, но это вызвало проблемы

def variables=[
                  ['var1':'test1'],
                  ['var2':'test2'],
                  ['var3':'test3']
                  ]

    println "${variables.size()}" 
    variables.each{entry ->   
      println "${entry.key} "   
    }

, так как я получил:

3
null 
null 
null 

Я ожидаю:

3
var1
var2
var3 

что не так с моим кодом?

спасибо !!!

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Вы хотите:

def variables=[
    'var1':'test1',
    'var2':'test2',
    'var3':'test3'
]

println variables.size()
variables.each{entry ->   
    println entry.key
}

До того, как у вас был ArrayList, содержащий три объекта LinkedHashMap. Приведенный выше код представляет собой один LinkedHashMap с тремя записями. Вам также не нужна интерполяция строк, поэтому я удалил ее.

0 голосов
/ 08 января 2013

Решение Мэтью прекрасно работает, и это, вероятно, то, что вы хотели (более простая структура данных для начала).

Однако, если вы действительно хотите, чтобы variables был списком из трех карт (согласно вашему вопросу), тогда вы можете получить желаемый результат:

def variables=[
      ['var1':'test1'],
      ['var2':'test2'],
      ['var3':'test3']
]

println "${variables.size()}" 

variables.each{ entry->
    entry.each {
        println it.key
    }
}

Inвнешнее замыкание, каждый entry является картой.Поэтому мы перебираем каждую из этих карт, используя внутреннее замыкание.В этом внутреннем замыкании каждый it параметр замыкания является парой ключ: значение, поэтому мы просто печатаем его ключ, используя it.key.

Как и Мэтью, я также удалил интерполяцию строк, так как выэто не нужно.

...