如何找出'map [string] [] [] int'是否具有值

Given this code:

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]]]

how do I know if '[30, 30]' is in 'aa'?

I want to check, whether 'aa' has '[30 30]'.

You'll have to iterate over the contents of your map to check whether an element is contained in that map or not.

For example:

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")
        }
    }
}

With myMap as aa you'll get no output, and with myMap as bb you'll get "Yeah" printed.

If your inner-most slices get longer, you should do the check step as a loop as well instead of hard-coded like that.

Maps are only indexed by key. This means its cheap and easy (ideally constant time complexity) to find a or b, but its harder to look for a value (linear time complexity).

Therefore, it's a few for loops:

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
}