gpt4 book ai didi

c# - 使用递归的未知循环数

转载 作者:行者123 更新时间:2023-11-30 12:14:59 25 4
gpt4 key购买 nike

我之前做过一些研究并找到了一些很棒的文章,但我似乎无法针对我给定的问题定制任何解决方案。从所做的研究来看,我相信解决这个问题的最好方法是使用递归。我已经使用一些通用类做了一个示例,但本质上我的问题是我在列表中可以包含大约 10 个类。我可能只有这些类(class)中的一门,也可能有十门。对于给定的问题,我最终找到了“项目”(全部继承自项目)的最佳组合。我认为这会相当容易,除了我必须在每次测试之前处理创建组合。

下面是一些仅使用两个类的示例代码。如果递归不是解决此问题的最佳方法,请根据需要进行更正。我如何将其转换为用于需要测试的任意数量的项目?

已编辑:正如一些人指出的那样,我的示例代码是迭代解决方案,但它仅在我有两个项目时才有用。因此,我需要定义一个递归函数来根据运行时所需的 for 循环数来解决问题。

-机会

研究:

C#: N For Loops

Arbitrary number of nested-loops?

Number of nested loops at runtime

static void Main(string[] args)
{
List<Item> myItem = new List<Item>();

int numberItem1 = 0, numberItem2 = 0;
foreach (var item in myItem)
{
if (item.GetType() == typeof(Item1))
{
numberItem1++;
}
else if (item.GetType() == typeof(Item2))
{
numberItem2++;
}
}

List<Item> testingItems = new List<Item>();
//FirstItem
for (int a = 0; a < numberItem1; a++)
{
for (int b = 0; b <= a; b++)
{
testingItems.Add(new Item1 { });
}
//DoTest()

testingItems.Clear();
//Second Item
for (int c = 0; c < numberItem2; c++)
{
for (int d = 0; d <= a ; d++)
{
testingItems.Add(new Item1 { });
}
for (int e = 0; e <= c; e++)
{
testingItems.Add(new Item2 { });
}
//DoTest()
testingItems.Clear();
}
}
}

最佳答案

非递归解决方案。

IEnumerable<List<Item>> TestLists(List<Item> fullList)
{
List<Type> types = fullList.Select(i => i.GetType()).Distinct().ToList();
List<Item> testList = new List<Item> { (Item)Activator.CreateInstance(types[0]) };
yield return testList;

bool finished = false;
while (!finished)
{
bool incremented = false;
int i = 0;
while (i < types.Count && !incremented)
{
if (testList.Where(t => t.GetType() == types[i]).Count() <
fullList.Where(t => t.GetType() == types[i]).Count())
{
testList.Add((Item)Activator.CreateInstance(types[i]));
incremented = true;
}
else
{
testList = testList.Where(t => t.GetType() != types[i]).ToList();
i++;
}
}
if (incremented)
{
yield return testList;
}
else
{
finished = true;
}
}
}

用法:

foreach (var partList in TestLists(myListToTest))
{
DoTest(partList);
}

关于c# - 使用递归的未知循环数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8476813/

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