Эффективная проверка существования ключа в нескольких картах
В Go принято работать с картами, которые представляют собой эффективные структуры данных для получения ключа -ценные пары. Однако предоставленный разработчиком код демонстрирует необходимость проверки существования ключа в двух отдельных картах. Остается вопрос, можно ли сделать этот процесс более кратким.
Как поясняется в ответе, использование специальной формы v, ok := m[k] в Go для проверки существования ключа ограничивается назначениями одной переменной. . Таким образом, объединение двух проверок в одну, если условие с использованием этой формы, невозможно.
Однако существуют альтернативные подходы для достижения желаемой функциональности:
Назначение кортежа:
Если тип значения карты является типом интерфейса и вы можете гарантировать, что нулевое значение не используется, вы можете выполнить назначение кортежа, используя два индекса. выражения:
if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil { // ... }
Вспомогательная функция:
Вспомогательную функцию можно создать для выполнения проверки существования ключа в обеих картах и возврата результатов:
func idx(m1, m2 map[string]interface{}, k string) ( v1, v2 interface{}, ok1, ok2 bool) { v1, ok1 = m1[k] v2, ok2 = m2[k] return }
Эту функцию затем можно использовать следующим образом:
if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 { // ... }
Эти подходы позволяют провести краткую и эффективную проверку существования ключа в нескольких сопоставлениях в рамках одного условного оператора.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3