猿问

如何确定 'map[string][][]int' 是否有值

鉴于此代码:


var a map[string][][]int


var aa map[string][][]int = map[string][][]int{"a": [][]int{{10, 10}, {20, 20}}}

var bb map[string][][]int = map[string][][]int{"b": [][]int{{30, 30}, {40, 40}}}


fmt.Println(aa) // >> map[a:[[10 10] [20 20]] b:[[30 30] [40 40]]]

我怎么知道 '[30, 30]' 是否在 'aa' 中?


我想检查“aa”是否有“[30 30]”。


MYYA
浏览 206回答 2
2回答

一只名叫tom的猫

您必须遍历地图的内容以检查该地图中是否包含某个元素。例如:target := []int{30, 30}for _, v := range myMap {    for _, sub := range v {        if len(sub) == len(target) && sub[0] == target[0] && sub[1] == target[1] {            fmt.Println("yeah")        }    }}使用myMapasaa你将不会得到任何输出,而使用myMapasbb你将打印出“Yeah”。如果最里面的切片变长,您也应该将检查步骤作为一个循环来执行,而不是像那样硬编码。

FFIVE

地图仅按键索引。这意味着找到aor既便宜又容易(理想情况下是恒定的时间复杂度) b,但更难找到一个值(线性时间复杂度)。因此,它是几个 for 循环:func find(searchFor [][]int, m map[string][][]int) bool {  for _, v := range m {    if sliceEq(v, searchFor) {      return true    }  }  return false}func sliceEq(a, b [][]int) bool {  if len(a) != len(b) {    return false  }  for i := range a {    if a[i] != b[i] {      return false    }  }  return true}
随时随地看视频慕课网APP

相关分类

Go
我要回答