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  }