gpt4 book ai didi

dictionary - 在一个条件下检查键是否存在于多个映射中

转载 作者:行者123 更新时间:2023-12-01 22:41:13 25 4
gpt4 key购买 nike

我需要检查两个 map 中是否存在相同的键:

if v1, ok1 := map1["aaa"]; ok1 {
...
}
if v2, ok2 := map2["aaa"]; ok2 {
...
}

是否可以将这两个条件合二为一?我设法做这样的事情:
v1, ok1 := map1["aaa"]
v2, ok2 := map2["aaa"]
if ok1 && ok2 {
...
}

但我很好奇它(分配和检查)是否可以在一个 if 中完成健康)状况。

最佳答案

不,这做不到。 Spec: Index expressions:

An index expression on a map a of type map[K]V used in an assignment or initialization of the special form

v, ok = a[x]
v, ok := a[x]
var v, ok = a[x]

yields an additional untyped boolean value. The value of ok is true if the key x is present in the map, and false otherwise.


所以你可以使用特殊的 v, ok := m[k]仅当没有其他内容被分配时才形成。
但是,如果您不使用 zero value映射的值类型,您可以使用简单的元组赋值进行检查;不使用特殊形式,而是使用 2 个简单的索引表达式。
例如,如果您的值类型是某种接口(interface)类型(例如 interface{} ),并且您知道您不使用 nil值,您可以执行以下操作:
if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil {
fmt.Printf("Both map contains key '%s': %v, %v\n", "aaa", v1, v2)
}
当然,使用辅助函数,您可以一步完成:
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 {
fmt.Printf("Both map contains key '%s': %v, %v\n", "aaa", v1, v2)
}
尝试 Go Playground 上的示例.

关于dictionary - 在一个条件下检查键是否存在于多个映射中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63836224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com