gitee.com/quant1x/num@v0.3.2/align.go (about) 1 package num 2 3 // Align data alignment 4 // 5 // a 通常是默认值 6 func Align[E BaseType](x []E, a E, n int) []E { 7 return v2Align[E](x, a, n) 8 } 9 10 func v1Align[E BaseType](x []E, a E, length int) []E { 11 n := len(x) 12 if n == length { 13 return x 14 } 15 if n > length { 16 // 截断, 需要注意T类型的变化, 如果是指针, 需要防止内存泄露 17 d := x[0:length] 18 // 多余的元素置为nil 19 //for i:= n; i < length; i++ { 20 // x[i] = nil 21 //} 22 return d 23 } 24 // 扩展内存 25 d := make([]E, length) 26 m := copy(d, x) 27 // m 和 n 应该是相等 28 for i := m; i < length; i++ { 29 d[i] = a 30 } 31 return d 32 } 33 34 func v2Align[E BaseType](x []E, a E, n int) []E { 35 m := len(x) 36 if m == n { 37 return x 38 } 39 if m > n { 40 // 截断 41 return x[:n] 42 } 43 // 扩展内存 44 d := make([]E, n) 45 copy(d, x) 46 RepeatInto(d[m:], a, n-m) 47 return d 48 }