gpt4 book ai didi

c# - 从一组可能性中找到所有组合

转载 作者:行者123 更新时间:2023-11-30 20:54:13 25 4
gpt4 key购买 nike

我有多组数组,其中包含附加的数组,这些数组附加了我用于计算数学的值。为了找到这些东西的最佳组合,我需要从这些数组中混合搭配。我见过与此类似的“解决方案”,但它们通常只有 1 个阵列深,没有真正的组合/可能性。所以举个例子。

我有集合 A、B 和 C。集合 A 包含 Aa、Ab、Ac 和 Ad。 Aa 包含一组值。为其他人推断出来。 Aa 只能与 Ba 和 Ca 进行比较。我如何着手编写一个程序来查找所有组合(即 Aa、Ab、Cc、Bd 与 Ba、Cb、Ac、Bd 等相比),以便我可以比较每个组合的数学运算以找到最佳组合?注意:这只是一个例子,具体3组4组4组我不需要,需要能扩展。

现在我知道我没有为我的变量使用非常有意义的名称,但如果给定的任何代码中确实有有意义的名称,我将不胜感激(我真的不想在代码中围绕 x 和 c 变量) .

最佳答案

接受的答案似乎是正确的,但在 C# 中做笛卡尔积是一种非常奇怪的方法。如果您有给定数量的序列,您可以像这样惯用地使用他们的笛卡尔积:

    var aList = new[] { "a1", "a2", "a3" };
var bList = new[] { "b1", "b2", "b3" };
var cList = new[] { "c1", "c2", "c3" };
var product = from a in aList
from b in bList
from c in cList
select new[] { a, b, c };

foreach (var p in product)
Console.WriteLine(string.Join(",", p));

如果你有任意多的序列需要取他们的笛卡尔积,那么你可以这样做:

static class Extensions
{
public 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}));
}
}

然后:

    var aList = new[] { "a1", "a2", "a3" };
var bList = new[] { "b1", "b2", "b3" };
var cList = new[] { "c1", "c2", "c3" };
var lists = new[] { aList, bList, cList };
var product = lists.CartesianProduct();
foreach (var p in product)
Console.WriteLine(string.Join(",", p));

http://ericlippert.com/2010/06/28/computing-a-cartesian-product-with-linq/

和我的回答

Generating all Possible Combinations

有关此问题的更多讨论。

关于c# - 从一组可能性中找到所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19261200/

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