为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MYYA 2023-05-15 14:39:17
鉴于此代码:var a map[string][][]intvar 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]”。
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

您必须遍历地图的内容以检查该地图中是否包含某个元素。


例如:


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”。


如果最里面的切片变长,您也应该将检查步骤作为一个循环来执行,而不是像那样硬编码。


查看完整回答
反对 回复 2023-05-15
?
FFIVE

TA贡献1797条经验 获得超6个赞

地图仅按键索引。这意味着找到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

}


查看完整回答
反对 回复 2023-05-15
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信