0
構造体フィールドからすべての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
}
はゴルーチン、チャネルを使用してこれを行うには、より効率的な方法はありますが、と私はマップを使って作業していますが、/またはwaitgroupsなど?
同期オーバーヘッドなどの理由で、ゴルーチンがここで助けになることはまずありません。地図やスライスのサイズを先取りすることでパフォーマンスを向上させることができます。例えばKeyValueMap [value.X] = make([] int、0、1000) ' - ' 1000'は実際のサイズを反映しています測定。 –
'topClass'、' nestedClass'、 'nestedItem'の定義方法に関する情報がないと、あなたの現在の実装よりも*効率的な方法*を見つけるのは難しいです。 – putu
UPDATE:構造体の定義が追加されました。 –