Dictionary 带映射优化的嵌套范围循环
我试图从结构字段中收集所有X和Y值,并将属于同一X值的Y值放置在地图中,但它是向下嵌套3层的 目前,我正在使用以下代码:Dictionary 带映射优化的嵌套范围循环,dictionary,optimization,go,nested-loops,Dictionary,Optimization,Go,Nested Loops,我试图从结构字段中收集所有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 nestedCla
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
}
是否有更有效的方法使用goroutine、channels和/或waitgroups等进行此操作。即使我正在使用map?以下代码在密钥已经存在的情况下消除了额外的map查找。它也比较短
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)
}
}
}
由于同步开销等原因,goroutines不太可能帮助您。您可以通过预先调整地图和切片的大小来提高性能;e、 g.KeyValueMap:=makemap[int][]int,1000和KeyValueMap[value.X]=make[]int,0,1000-其中1000反映了实际大小度量。如果没有关于如何定义topClass、nestedClass、nestedItem的信息,很难找到比当前实现更有效的方法。更新:为结构添加了定义。