Golang中如何根据相同键合并两个map

Golang中如何根据相同键合并两个map 我不明白为什么这个方法行不通。我有两个映射(map),它们具有相同的键但不同的值。我需要将这两个映射的值合并到一个结构体数组中,并且键要匹配。

var mapValues1= map[int64]*typestruct1{1: &typestruct1{"value1", "value2"}, 2: &typestruct1{"value3", "value4"}, 3: &typestruct1{"value5", "value6"}}
var mapValues2= map[int64]*typestruct2{1: &typestruct2{"value7", "value8"} 2: &typestruct2{"value9", "value10"} ,3: &typestruct2{"value11", "value12"}}

type mergeStruct struct {
   mgstruct1 *typestruct1
   mgstruct2 *typestruct2
}

我需要从具有相同键的映射中获取一个合并值后的结构体数组。

func mergeFunc() []*mergeStruct{
mgs:=[]*mergeStruct{}

for kv, v := range typestruct1 {
val := lookUpValue(kv)
mgs = append(mgs, &mergeStruct{v, val})
}

return mgs
}

func lookUpValue(k int64, mv map[int64]*typestruct2) *typeStruct2 {
  _, ok := mv[k]
  if ok {
	  n := mv[k]
	  return n
  } else {
	  return nil
  }
}

但这样不行,值没有正确匹配,而且全乱套了。请告诉我其他方法。


更多关于Golang中如何根据相同键合并两个map的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你的代码中有一些拼写错误。 请查看 Go Playground - The Go Programming Language

更多关于Golang中如何根据相同键合并两个map的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中合并两个具有相同键的map,需要确保两个map的键完全匹配。你的代码存在几个问题:lookUpValue函数没有正确接收参数,且循环遍历的是类型而非map。以下是修正后的实现:

func mergeFunc(map1 map[int64]*typestruct1, map2 map[int64]*typestruct2) []*mergeStruct {
    mgs := []*mergeStruct{}
    
    for key, val1 := range map1 {
        val2, exists := map2[key]
        if exists {
            mgs = append(mgs, &mergeStruct{
                mgstruct1: val1,
                mgstruct2: val2,
            })
        }
    }
    
    return mgs
}

如果需要处理两个map键不完全匹配的情况,可以遍历键数量更多的map:

func mergeFuncComplete(map1 map[int64]*typestruct1, map2 map[int64]*typestruct2) []*mergeStruct {
    mgs := []*mergeStruct{}
    
    // 遍历所有可能的键
    allKeys := make(map[int64]bool)
    for k := range map1 {
        allKeys[k] = true
    }
    for k := range map2 {
        allKeys[k] = true
    }
    
    for key := range allKeys {
        mgs = append(mgs, &mergeStruct{
            mgstruct1: map1[key],  // 如果不存在则为nil
            mgstruct2: map2[key],  // 如果不存在则为nil
        })
    }
    
    return mgs
}

使用示例:

map1 := map[int64]*typestruct1{
    1: &typestruct1{"value1", "value2"},
    2: &typestruct1{"value3", "value4"},
}

map2 := map[int64]*typestruct2{
    1: &typestruct2{"value7", "value8"},
    2: &typestruct2{"value9", "value10"},
}

result := mergeFunc(map1, map2)
// result 包含两个mergeStruct,键1和2的值都已正确合并

如果两个map都保证有相同的键,第一个方法更高效。如果键可能不完全匹配,使用第二个方法。

回到顶部