reflect 与 map

package main

import (
	"fmt"
	"reflect"
)

func main() {
	mp := reflect.MakeMap(reflect.MapOf(reflect.TypeOf(""), reflect.TypeOf("")))
	//mp := reflect.MakeMapWithSize(reflect.MapOf(reflect.TypeOf(""), reflect.TypeOf("")),10) // 创建的同时设置size
	mp.SetMapIndex(reflect.ValueOf("hello"), reflect.ValueOf("hello")) // map["hello"] = "hello"
	mp.SetMapIndex(reflect.ValueOf("world"), reflect.ValueOf("world"))
	mp.SetMapIndex(reflect.ValueOf("2023"), reflect.ValueOf("2023"))
	mp.SetMapIndex(reflect.ValueOf("加油"), reflect.ValueOf("加油"))

	mp1 := reflect.MakeMap(reflect.MapOf(reflect.TypeOf(""), reflect.TypeOf("")))
	mp1.SetMapIndex(reflect.ValueOf("mp1"), reflect.ValueOf("mp1")) // map["hello"] = "hello"
	it := mp.MapRange()                                             // 迭代器
	for it.Next() {                                                 // Next 判断是否有下一个值

		k := reflect.New(mp.Type().Key()).Elem()  // MapOf中的key类型
		v := reflect.New(mp.Type().Elem()).Elem() // MapOf中的elem类型
		k.SetIterKey(it)                          //将当前的key 赋值给k  SetIterKey assigns to v the key of iter's current map entry. It is equivalent to v.Set(iter.Key()), but it avoids allocating a new Value. As in Go, the key must be assignable to v's type
		v.SetIterValue(it)                        //将当前的value 赋值给v // SetIterValue assigns to v the value of iter's current map entry. It is equivalent to v.Set(iter.Value()), but it avoids allocating a new Value. As in Go, the value must be assignable to v's type.

		fmt.Println("k", k.Interface().(string), "v", v.Interface().(string))
		fmt.Println(it.Key(), ":", it.Key())
	}

	it.Reset(mp1) // 将迭代器绑定到其他map上,复用迭代器
	for it.Next() {
		fmt.Println("复用it", it.Key(), ":", it.Key())
	}

	return
	fmt.Println(mp.MapKeys())                         // map 的所有key
	fmt.Println(mp.MapIndex(reflect.ValueOf("2023"))) // 等价于 map["2023"],即取值
	fmt.Println(mp.Len())                             // len(map)

	//map 如何进行delete?
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

metabit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值