/* Copyright (c) [2023] [pcm] [pcm-coordinator] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. */ package common import ( "math" "math/rand" "time" ) // 求交集 func Intersect(slice1, slice2 []int64) []int64 { m := make(map[int64]int) nn := make([]int64, 0) for _, v := range slice1 { m[v]++ } for _, v := range slice2 { times, _ := m[v] if times == 1 { nn = append(nn, v) } } return nn } func IntersectString(slice1, slice2 []string) []string { k := make(map[string]int) for _, num := range slice1 { k[num]++ } var output []string for _, num := range slice2 { if k[num] > 0 { output = append(output, num) k[num]-- } } return output } func RemoveDuplicates(slc []string) []string { keys := make(map[string]bool) list := []string{} for _, entry := range slc { if _, value := keys[entry]; !value { keys[entry] = true list = append(list, entry) } } return list } func MicsSlice(origin []int64, count int) []int64 { tmpOrigin := make([]int64, len(origin)) copy(tmpOrigin, origin) //一定要seed rand.Seed(time.Now().Unix()) rand.Shuffle(len(tmpOrigin), func(i int, j int) { tmpOrigin[i], tmpOrigin[j] = tmpOrigin[j], tmpOrigin[i] }) result := make([]int64, 0, count) for index, value := range tmpOrigin { if index == count { break } result = append(result, value) } return result } func RoundFloat(val float64, precision uint) float64 { ratio := math.Pow(10, float64(precision)) return math.Round(val*ratio) / ratio } func Contains(s []string, e string) bool { for _, a := range s { if a == e { return true } } return false } func ConcatMultipleSlices[T any](slices [][]T) []T { var totalLen int for _, s := range slices { totalLen += len(s) } result := make([]T, totalLen) var i int for _, s := range slices { i += copy(result[i:], s) } return result }