V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  kuqma98  ›  全部回复第 3 页 / 共 3 页
回复总数  46
1  2  3  
考虑户口的话没必要后悔,待遇和工作都没变,而你有了拿户口的资格。
@listenfree
假设你有一个结构体类型为 Person ,其中有一个字段 id ,类型为 int ,表示人员的唯一标识符。你可以编写一个通用的方法,将一个[]Person 类型的切片,根据 id 字段,转换成一个 map[int]Person 类型的映射表。以下是一个示例实现:

type Person struct {
id int
name string
age int
}

func SliceToMapByID(slice interface{}) (map[int]interface{}, error) {
value := reflect.ValueOf(slice)
if value.Kind() != reflect.Slice {
return nil, errors.New("input is not a slice")
}

mapValue := reflect.MakeMapWithSize(reflect.MapOf(reflect.TypeOf(int(0)), value.Type().Elem()), value.Len())

for i := 0; i < value.Len(); i++ {
elem := value.Index(i)
id := elem.FieldByName("id").Interface().(int)
mapValue.SetMapIndex(reflect.ValueOf(id), elem)
}

return mapValue.Interface().(map[int]interface{}), nil
}

这个方法的输入参数是一个空接口类型,可以接受任何类型的切片作为输入。使用反射来处理输入参数的类型,并检查它是否为切片类型。如果是,就创建一个空的映射表,然后遍历切片中的每个元素,提取它的 id 字段的值,并将该元素添加到映射表中。最后返回一个 map[int]interface{}类型的映射表和一个 error 类型的错误(如果有的话)。

请注意,由于使用了反射,这个方法的性能可能不是非常高效,特别是对于大型切片来说。因此,如果你知道你的切片类型是[]Person ,你也可以直接编写一个特定类型的方法,而不是使用反射。
2023-02-14 17:52:14 +08:00
回复了 lyhang 创建的主题 程序员 2023 新年新新新新气象-北京程序员交流群
adulna 求拉
2023-01-12 17:16:35 +08:00
回复了 overthemoon 创建的主题 问与答 相亲送女孩子什么见面礼好
盲盒
2023-01-05 16:49:29 +08:00
回复了 timedivision 创建的主题 问与答 结了婚的老哥们进来聊聊呗
元旦刚买的戒指和手镯,自己的一点感悟。
钻戒的确不该买,但又是首饰里女生最喜欢的,如果女生不是一口同意不买钻戒,就必须买了。
买三金是买首饰不是买理财,首饰的品牌很重要,1 万 2 可以买 20 克的周大福或者六福珠宝,也可以买 24 克周六福,多 4 克戴手上看不出来感觉不出来,但是品牌叫得响说得出。
2022-12-09 14:50:37 +08:00
回复了 damai0419 创建的主题 北京 北京有没有靠谱一点,修 macbook 的地儿?
dr mac 维修工作室,在中关村,淘宝有点可以先问问价
1  2  3  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4940 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 01:25 · PVG 09:25 · LAX 18:25 · JFK 21:25
Developed with CodeLauncher
♥ Do have faith in what you're doing.