package yu_array // Merge // // @Description: 合并数组 // @param args 欲合并的数组 // @return []T 合并结果 func Merge[T any](args ...[]T) []T { j_size := 0 for _, j_arr := range args { j_size += len(j_arr) } j_buf := make([]T, j_size) j_size = 0 for _, j_arr := range args { copy(j_buf[j_size:], j_arr) j_size += len(j_arr) } return j_buf } // Insert func Insert[T any](t []T, i int, item ...T) []T { if i < 0 || len(item) == 0 { return t } if len(t) == 0 { return item } if i >= len(t) { return append(t, item...) } j_temp := make([]T, len(t)-i) copy(j_temp, t[i:]) return append(append(t[:i], item...), j_temp...) } // Append func Append[T any](t []T, item ...T) []T { if len(item) == 0 { return t } return append(t, item...) } // Remove func Remove[T any](t []T, start int, size int) []T { if start < 0 || size < 1 || start+size > len(t) { return t } return append(t[:start], t[start+size:]...) } // Index func Index[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr | string](t []T, sub T) int { for j_i, j_item := range t { if j_item == sub { return j_i } } return -1 } // Xor // // @Description: 异或运算数据,修改原始 data // @param data 数据 // @param key 数据 // @return []byte 运算后的数据 func Xor[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](data []T, key []T) []T { j_buf_len, j_key_len := len(data), len(key) if j_buf_len == 0 || j_key_len == 0 { return data } for j_i := 0; j_i < j_buf_len; j_i++ { data[j_i] ^= key[j_i%j_key_len] } return data } // XorEx // // @Description: 异或运算数据,不修改原始 data // @param data 数据 // @param key 数据 // @return []byte 运算后的数据 func XorEx[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](data []T, key []T) []T { j_buf_len, j_key_len := len(data), len(key) if j_buf_len == 0 || j_key_len == 0 { return nil } j_buf := make([]T, j_buf_len) for j_i := 0; j_i < j_buf_len; j_i++ { j_buf[j_i] = data[j_i] ^ key[j_i%j_key_len] } return j_buf }