带有地图优化的嵌套范围循环

时间:2017-07-13 09:08:16

标签: dictionary optimization go nested-loops

我试图从一个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等是否有更有效的方法来做到这一点,即使我正在处理地图?

1 个答案:

答案 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)
        }
    }
}