亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

循環包含一個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 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號