gpt4 book ai didi

dictionary - 在一种情况下检查键是否存在于多个映射中

转载 作者:IT王子 更新时间:2023-10-29 01:14:31 25 4
gpt4 key购买 nike

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

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/41978101/

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