我试图从一个Struct字段中收集所有X和Y值,并在地图中放置属于相同X值的Y值,但它嵌套了3个级别。
目前,我使用以下代码:
topClasses := make([]TopClass, 0)
// populate topClasses Slice here
KeyValueMap := make(map[int][]int)
for _, nestedClass := range topClasses {
for _, nestedItem := range nestedClass.nestedList {
for _, value := range nestedItem.Values {
if _, found := KeyValueMap[value.X]; !found {
KeyValueMap[value.X] = []int{value.Y}
} else {
KeyValueMap[value.X] = append(KeyValueMap[value.X], value.Y)
}
}
}
}
以下是如何实施结构:
type TopClass struct {
nestedList []ListClass
}
type ListClass struct {
Values []Value
}
type Value struct {
X int
Y float64
}
使用goroutines,channel和/或waitgroups等是否有更有效的方法来做到这一点,即使我正在处理地图?
答案 0 :(得分:1)
以下代码在密钥已存在的情况下消除了额外的地图查找。它也更短。
KeyValueMap := make(map[int][]int)
for _, nestedClass := range topClass {
for _, nestedItem := range nestedClass.nestedList {
for _, value := range nestedItem.Values {
KeyValueMap[value.X] = append(KeyValueMap[value.X], value.Y)
}
}
}