12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 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
- }
|