Создание ассоциативной карты в Go: Как глубоко копировать и очистить оригинал
В Go вы пытаетесь скопировать содержимое карты, называемой AMAP, в другую карту, названную AsuperMap. Впоследствии вы хотите прояснить AMAP, чтобы принять новые значения в итерации следующей цикла. Тем не менее, вы столкнетесь с проблемой очистки карты без также очистки ее ссылки в Asupermap.
проблема с ссылками
ваш псевдо -код иллюстрирует, что когда вы удаляете элемент из AMAP, используя Delete (amap, x), ссылка на этот элемент также удален из AsuperMap. Это связано с тем, что AsuperMap [y] содержит ссылку на AMAP, и когда вы модифицируете AMAP (в данном случае, удаляя элемент), вы фактически изменяете базовые данные, которые ASUperMap указывает на. &&]
глубокописывающие карты
, чтобы по -настоящему создать ассоциативную карту. Это включает в себя создание нового объекта MAP с собственной копией данных, а не просто содержит ссылку на исходную карту.вы можете достичь, создав вручную для цикла, которая итерация по исходной карте и добавляет каждую пару клавишных значений к новой карте:
для k: = range-map { Newmap [k] = V. }
for k, v := range originalMap { newMap[k] = v }. Для этого вы можете использовать функцию сброса из пакета контейнера/списка:
для чего -то: = range Fruits { amap: = make (map [string] astruct) asupermap: = make (map [string] map [string] Astruct) для x: = range whenth { amap [x] = adata asupermap [y] = amap Удалить (amap, x) } // Deep Copy Amap в Newmap newmap: = make (map [string] astruct) для k, v: = range amap { Newmap [k] = V. } // очистить оригинальный AMAP Контейнер/список. Reset (AMAP) // Сохранить новую карту saveasupermap (newmap) }
, выполнив эти шаги, вы можете успешно создать ассоциативную карту в Go, выполнить глубокую копию карты для сохранения исходных данных и очистить исходную карту, чтобы принять новые значения в следующей итерации цикла. ]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3