From 9a3548652a13df1bd7e6db3c9a6ebab136fb0c93 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Thu, 6 Jul 2023 16:17:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87=20?= =?UTF-8?q?hash=20=E5=8C=85=E9=9A=8F=E6=9C=BA=E7=9A=84=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=20map=20=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/hash/hash.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/utils/hash/hash.go b/utils/hash/hash.go index d1acfa70..ab59e01b 100644 --- a/utils/hash/hash.go +++ b/utils/hash/hash.go @@ -25,3 +25,43 @@ func ToJson[K comparable, V any](m map[K]V) string { } return "{}" } + +// RandomGet 随机获取一个元素 +func RandomGet[K comparable, V any](m map[K]V) (v V) { + for _, v := range m { + return v + } + return +} + +// RandomGetKey 随机获取一个 key +func RandomGetKey[K comparable, V any](m map[K]V) (k K) { + for k = range m { + return k + } + return +} + +// RandomGetN 随机获取 n 个元素 +// - 获取到的元素不会是重复的,当 map 的长度不足 n 时,返回的元素等同于 hash.ToSlice +func RandomGetN[K comparable, V any](m map[K]V, n int) (vs []V) { + for _, v := range m { + vs = append(vs, v) + if len(vs) >= n { + return + } + } + return +} + +// RandomGetKeyN 随机获取 n 个 key +// - 获取到的元素不会是重复的,当 map 的长度不足 n 时,返回的元素等同于 hash.KeyToSlice +func RandomGetKeyN[K comparable, V any](m map[K]V, n int) (ks []K) { + for k := range m { + ks = append(ks, k) + if len(ks) >= n { + return + } + } + return +}