Dictionary 带映射优化的嵌套范围循环

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

我试图从结构字段中收集所有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
}

是否有更有效的方法使用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的信息,很难找到比当前实现更有效的方法。更新:为结构添加了定义。