voucher/internal/pkg/helper/int.go

51 lines
1.3 KiB
Go

package helper
import (
"fmt"
"strings"
)
func ArrDeduplication[T int | int32 | uint32 | uint64 | int64 | int8 | string](arr []T) []T {
seen := map[T]bool{}
var result []T
for _, num := range arr {
if !seen[num] {
seen[num] = true
result = append(result, num)
}
}
return result
}
// BuildStr 函数用于将 uid 和 arr 中的元素拼接成一个字符串
func BuildStr[T int | int32 | uint32 | uint64 | int64 | int8 | string](uid string, arr []T) string {
// 创建一个 strings.Builder 实例,用于高效地构建字符串
var sb strings.Builder
// 写入初始的 uid
sb.WriteString(uid)
// 遍历 arr 切片中的每个元素
for i, id := range arr {
// 如果不是第一个元素,先写入下划线分隔符
if i > 0 {
sb.WriteByte('_')
} else if sb.Len() > 0 {
// 如果 uid 不为空且是第一个元素,也写入下划线分隔符
sb.WriteByte('_')
}
// 根据元素的类型进行不同的处理
switch v := any(id).(type) {
case string:
// 如果是字符串类型,直接写入
sb.WriteString(v)
default:
// 对于其他类型,使用 fmt.Sprint 转换为字符串后写入
sb.WriteString(fmt.Sprint(v))
}
}
// 将 strings.Builder 中的内容转换为字符串并返回
return sb.String()
}