#grails #groovy #hashmap
#grails #groovy #хэш-карта
Вопрос:
У меня интересная проблема: я не могу получить доступ к своим ключам хэш-карты.
У меня есть следующая хэш-карта:
{a=Retrieve User Account call failed, b=This user has multiple accounts}
Я получаю пустые переменные, когда выполняю любое из следующих действий:
"${myMap.get('a')}"
"${myMap['a']}"
"${myMap.a}"
Я получаю ложные значения из:
"${myMap.containsKey('a')}"
"${myMap.keySet().contains('a')}"
Но я получаю true, когда делаю:
"${myMap.keySet()[1] == 'a'}"
В чем проблема? И как я могу вызвать contains
либо ключи hashmap, либо набор ключей, чтобы узнать, есть ли ‘a’ в хэше / списке?
Если это поможет, я использую плагин groovy 2.3.0-rc-2 для набора инструментов Groovy / Grails и grails 2.4.1
Комментарии:
1. Это недопустимая хэш-карта, которая выглядит как какой-то действительно сломанный JSON.
2. То, что вы описываете, на самом деле невозможно, но, учитывая то, как вы представляете карту в своем примере, трудно сказать, является ли это вообще картой. Кроме того, если у вас есть карта, в которой есть ключ «a», и значение, связанное с этим ключом, является строкой «Ошибка вызова учетной записи пользователя», тогда
myMap.get('a')
,myMap['a']
иmyMap.a
все они будут преобразованы в строку «Ошибка вызова учетной записи пользователя».3. @JoshuaMoore это не сломанный JSON, это стандарт
toString()
карты Java.4. @IanRoberts Ах да! Действительно, это так!
5. Что такое
a
иb
здесь? Они определенно являются строками, а не (скажем) GStrings? Как именно инициализируется карта?
Ответ №1:
Возможно, это дублирующий вопрос, но я все равно на него отвечу. Ваш синтаксис в Groovy немного отличается.
Смотрите здесь:http://groovy.codehaus.org/Collections
Их примеры:
def map = [name:"Gromit", likes:"cheese", id:1234]
assert map.get("name") == "Gromit"
assert map.get("id") == 1234
assert map["name"] == "Gromit"
assert map['id'] == 1234
assert map instanceof java.util.Map
def emptyMap = [:]
assert emptyMap.size() == 0
emptyMap.put("foo", 5)
assert emptyMap.size() == 1
assert emptyMap.get("foo") == 5
Ваша карта:
def map = [a:"Retrieve User Account call failed",
b:"This user has multiple accounts"]
assert map.get("a") == "Retrieve User Account call failed"
// also
assert map.a == "Retrieve User Account call failed"
Комментарии:
1. Утверждения, которые у вас есть там с одиночными значениями, недействительны. Вам нужно двойное равенство.