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

循环包含一个map[int]*somepointer的interface{}

循环包含一个map[int]*somepointer的interface{}

Go
尚方宝剑之说 2023-06-26 16:54:58
我必须处理大量带有 int 键的映射,其中包含指向不同数据类型的指针。我需要一个函数(而不是每种映射类型 10 个函数)来遍历这些映射并获取最大和最小键值。
查看完整描述

2 回答

?
狐的传说

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

使用 Reflect 包对具有整数键和任意值类型的映射进行操作:


func getMaxKey(inout interface{}) int {

    keys := reflect.ValueOf(inout).MapKeys()

    if len(keys) == 0 {

        return 0

    }

    max := keys[0].Int()

    for _, key := range keys[1:] {

        n := key.Int()

        if n > max {

            max = n

        }

    }

    return int(max)

}

在操场上运行它



查看完整回答
反对 回复 2023-06-26
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

这就是我想出来的。它也可能适用于其他地图类型:

  • 它允许传入任何类型为 map[int]*somepointer 的映射

  • 不需要类型断言(在本例中)

-

func getMaxKey(inout interface{}) int {

    auxMap:= make(map[int]string)

    body, _ := json.Marshal(inout)

        json.Unmarshal(body, &auxMap)

    maxKey := 0

        for key,_ := range auxMap {

        if key > maxKey {

            maxKey = key

        }

    }

    return maxKey

}



func getMinKey(inout interface{}) int {

    auxMap:= make(map[int]string)

    body, _ := json.Marshal(inout)

        json.Unmarshal(body, &auxMap)

    minKey := 0

        for key,_ := range auxMap {

        if key < minKey || minKey == 0 {

            minKey = key

        }

    }

    return minKey

}


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

添加回答

举报

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