From d26ef3aca6ded00f91bc912488453948dbe3d9c2 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Wed, 26 Jul 2023 09:53:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20slice=20=E5=8C=85=E6=96=B0=E5=A2=9E=20C?= =?UTF-8?q?ombinationsPari=20=E5=87=BD=E6=95=B0=EF=BC=8C=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E4=BB=8E=E7=BB=99=E5=AE=9A=E7=9A=84=E4=B8=A4=E4=B8=AA=E6=95=B0?= =?UTF-8?q?=E7=BB=84=E4=B8=AD=E6=8C=89=E7=85=A7=E7=89=B9=E5=AE=9A=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E5=BE=97=E5=88=B0=E6=89=80=E6=9C=89=E7=BB=84=E5=90=88?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=86=8D=E5=B0=86=E4=B8=A4=E4=B8=AA=E6=95=B0?= =?UTF-8?q?=E7=BB=84=E7=9A=84=E7=BB=84=E5=90=88=E8=BF=9B=E8=A1=8C=E7=BB=84?= =?UTF-8?q?=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/slice/slice.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/utils/slice/slice.go b/utils/slice/slice.go index 63b6aa8..f477a1b 100644 --- a/utils/slice/slice.go +++ b/utils/slice/slice.go @@ -248,6 +248,19 @@ func Combinations[T any](a []T) [][]T { return result } +// CombinationsPari 从给定的两个数组中按照特定数量得到所有组合后,再将两个数组的组合进行组合 +// - 例如从数组 A 中得到所有数量为2的组合,从数组 B 中得到所有数量为3的组合,再将两个组合进行组合,得到所有数量为5的组合 +func CombinationsPari[T any](a, b []T, aCount, bCount int) [][]T { + var combinations [][]T + var as, bs = LimitedCombinations(a, aCount, aCount), LimitedCombinations(b, bCount, bCount) + for _, asi := range as { + for _, bsi := range bs { + combinations = append(combinations, append(asi, bsi...)) + } + } + return combinations +} + // LimitedCombinations 获取给定数组的所有组合,且每个组合的成员数量限制在指定范围内 func LimitedCombinations[T any](a []T, minSize, maxSize int) [][]T { n := len(a)