gpt4 book ai didi

arrays - 戈朗 : map with multiple values per key

转载 作者:行者123 更新时间:2023-12-05 01:51:22 24 4
gpt4 key购买 nike


func ParseportsFromFile(file string) (map[string]string, error) {
buf, err := ioutil.ReadFile(file)
if err != nil {
return nil, err
}
ret := [make(map[string]string)]
rows := strings.Split(string(buf), "\n")
for _, row := range rows {
kvs := strings.SplitN(row, "=", 2)
if len(kvs) == 2 {
ret[strings.TrimSpace(kvs[0])] = strings.TrimSpace(kvs[1])
}
}
return ret, nil
}

这个函数允许我读取这样的文件:

user1=123 
user1=321
user2=124

但是返回的数据是

map[user1:321 user2:124]

这意味着 user1=123 已被 user1=321 覆盖如何避免这种情况?如何创建一个数组 map [user1:[123,321], user2: 124]避免一个项目覆盖另一个?

最佳答案

因为 go 是强类型的,所以马上把它变成一个 slice 映射会更容易。查看http.Header类型,例如。他们在设计时遇到了同样的问题。

在您的情况下,这可能看起来像这样:

result := make(map[string][]string)

for _, row := range rows {
parts := strings.Split(row, "=")
key := parts[0]
value := parts[1]
result[key] = append(result[key], value)
}

https://go.dev/play/p/5uRH-aQmATR

否则,您需要使用 interface{}(任何),这样您就可以同时拥有 string[]string,但是完成它的逻辑会更复杂,使用它也会更复杂,因为你总是需要检查它是什么并进行类型断言等等。毕竟,我不会推荐它。

关于arrays - 戈朗 : map with multiple values per key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72247685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com