Изменение значения на карте в Groovy - PullRequest
3 голосов
/ 14 ноября 2009

Это очень простая программа, которую я пишу на Groovy.

Я определил карту внутри метода:

  def addItem() 
  {
    print("Enter the item name: ")
    def itemName = reader.readLine()
    print("Enter price : ")
    def price = reader.readLine()
    print("Enter barcode : ")
    def barcode = reader.readLine()
    data[itemName] = ['price' : price, 'barcode' : barcode]
  }

Проблема в том, что я не знаю, как обновить только одно значение внутри другого метода. Вот что я попробовал:

  def updatePrice() 
  {
    print("Enter the item name: ")
    def itemName = reader.readLine()
    print("Enter new price : ")
    def price = reader.readLine()
    data[itemName] = ['price' : price]
  }

Такого рода работы. Он изменяет значение цены, но также меняет значение штрих-кода на «ноль», предположительно, потому что оно перезаписывается ... ничем.

В основном мне нужен код, чтобы изменить цену, но оставьте штрих-код как есть. Любые идеи о том, как я могу это сделать?

Извините, если это смешной элементарный вопрос, но я все еще новичок в программировании.

1 Ответ

7 голосов
/ 14 ноября 2009

Что вы сделали, это заменили весь экземпляр карты для данного элемента. Есть несколько способов изменить значение ключа на карте. Вы можете сделать это традиционным способом Java:

data[itemName].set('price', price)

Вы можете получить к нему доступ, как и для itemName, используя квадратные скобки:

data[itemName].['price'] = price

Или вы можете получить доступ к значениям карт, используя обозначение Map.keyname. В качестве альтернативы вы можете просто написать:

data.itemName.price = price

Это также работает, когда вы хотите получить значение для данного ключа:

println data.itemName.price // prints the price value for an item
...