你可以使用副本的內部循環(應該更有效率)和外部循環的範圍(這導致更好的代碼)。
結果:
duplicate := make([][]int, len(matrix))
for i := range matrix {
duplicate[i] = make([]int, len(matrix[i]))
copy(duplicate[i], matrix[i])
}
如果你的目標是效率,它可能是有意義的做多分配了前面。這不會導致更易讀的代碼,但如果您經常這樣做,會導致更高效的代碼。此代碼假定您至少有一行,並且所有行的長度相同。您需要爲此添加測試。
n := len(matrix)
m := len(matrix[0])
duplicate := make([][]int, n)
data := make([]int, n*m)
for i := range matrix {
start := i*m
end := start + m
duplicate[i] = data[start:end:end]
copy(duplicate[i], matrix[i])
}
取決於你在做什麼,它可能是有意義的做一個「矩陣式」,也就是隻用一個片來實現。切片片不是最有效的數據結構,即使它更簡單。
在決定是否需要高效之前,請確保您花費大量時間進行使用分析的複製。然後,在你確定這實際上是一個熱點後,開始運行基準測試。詳情請參閱https://golang.org/pkg/testing/#hdr-Benchmarks。
您可以使用https://golang.org/pkg/builtin/#copy消除內循環,但我不確定它是否更有效。我猜想內建是會的。 – RayfenWindspear
謝謝,工作;)至少不會寫 –
我可能稍後會對它進行基準測試,因爲我很好奇它是如何比較的。 – RayfenWindspear