gpt4 book ai didi

c# - 一定数量的数字之间的所有可能组合 C#

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:14 25 4
gpt4 key购买 nike

我需要找到一个像这样工作的函数:

 int[] matches = getAllPossibleCombinations(
int lengthOfEachIntReturnedInArray,
List<char> typesOfElementsUsedInCombinations);

输入元素是这些(这只是一个例子):

  • int lengthofeachintreturnedinarray = (int) 2
  • List<char> typesofelementsusedincombinations = {a,b}

那么输出必须是(在一个字符串数组中):

aa

ab

ba

bb

数组中的每个单独的输出元素必须具有由方法中的第一个参数定义的长度(在本例中为 2),并且必须包含第二个参数中给定字母之间的所有可能组合

我已经看到了一些关于 powersets 的东西,我应该使用它们,还是应该 foreach循环适合这份工作吗?

!建议的问题与上面的答案不一样,它不使用设定长度!

最佳答案

我会带你去 Eric Lippert 的 article关于实现 Cartesian Product在 Linq 中,他将其写为 extension method .

static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences) 
{
IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
return sequences.Aggregate(
emptyProduct,
(accumulator, sequence) =>
from accseq in accumulator
from item in sequence
select accseq.Concat(new[] {item}));
}

使用它,您可以像这样实现您的方法:

static IEnumerable<string> GetAllPossibleCombinations(
int lengthofeachintreturnedinarray,
IEnumerable<string> typesofelementsusedincombinations)
{
return Enumerable
.Repeat(typesofelementsusedincombinations, lengthofeachintreturnedinarray)
.CartesianProduct()
.Select(strings => String.Concat(strings));
}

关于c# - 一定数量的数字之间的所有可能组合 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com