如何在C#中使用递归创建多维变量对象列表?
我试图在C#中生成一个多维的可能动作序列,对象可能在一个回合中执行,对象数量可变,对象可用的动作数量可变 每个物体每转一圈都应该做一个动作 例如:-其中对象是字母,它可以执行的操作是数字: 可能的对象/动作:a1、a2、a3、b1、c1如何在C#中使用递归创建多维变量对象列表?,c#,list,object,recursion,multidimensional-array,C#,List,Object,Recursion,Multidimensional Array,我试图在C#中生成一个多维的可能动作序列,对象可能在一个回合中执行,对象数量可变,对象可用的动作数量可变 每个物体每转一圈都应该做一个动作 例如:-其中对象是字母,它可以执行的操作是数字: 可能的对象/动作:a1、a2、a3、b1、c1 我有一个以对象为属性的操作列表 我希望多维列表如下所示: a1、b1、c1 a2、b1、c1 a3、b1、c1 b1、a1、c1 b1、a2、c1 b1、a3、c1 c1、a1、b1 当我开始编写函数以返回多维操作列表时,我意识到我是多么的深不可测,所以我
我有一个以对象为属性的操作列表 我希望多维列表如下所示:
- a1、b1、c1
- a2、b1、c1
- a3、b1、c1
- b1、a1、c1
- b1、a2、c1
- b1、a3、c1
- c1、a1、b1
private List<List<Move>> PotentialLine(List<Move> moves, List<Move> currentList = null, List<List<Move>> finalList = null)
{
if(finalList == null)
finalList = new List<List<Move>>();
if(currentList == null)
currentList = new List<Move>();
//find all combinations of move for this level
foreach(Move move in moves.ToList())
{
currentList.Add(move);
List<Move> movesRemaining = moves;
movesRemaining.RemoveAll(o=> o.card == move.card);
if(!movesRemaining.Any())
{
finalList.Add(currentList);
return finalList;
}
else
{
finalList = PotentialLine(movesRemaining, currentList, finalList);
}
}
return finalList;
}
private List PotentialLine(列表移动,列表当前列表=null,列表最终列表=null)
{
if(finalList==null)
finalList=新列表();
如果(currentList==null)
currentList=新列表();
//查找此级别的所有移动组合
foreach(在moves.ToList()中移动)
{
currentList.Add(move);
列表移动维护=移动;
movesRemaining.RemoveAll(o=>o.card==move.card);
如果(!movesRemaining.Any())
{
finalList.Add(当前列表);
回归终结者;
}
其他的
{
finalList=潜在行(movesRemaining、currentList、finalList);
}
}
回归终结者;
}
欢迎来到SO!即使你的代码不够好,也许你仍然可以分享它。还要补充:根据什么规则决定哪些对象/操作组合是可能的?请发布一些伪代码,包括输入和预期输出,以便更容易理解您的问题“我有一个以对象为属性的操作列表”-这听起来像是模拟此问题的正确方法吗?当然,一个对象有一个可能的操作列表是合乎逻辑的,而不是一个操作有一个可以完成它的对象列表。你说你想要一个可能操作的多维序列。为什么是多维的?您不只是想要一个可以应用于对象的操作列表吗?如何确定行动?这些物体来自哪里?对象是什么类型的?它们是否共享一个公共接口或基类?你说的“转身”是什么意思?你是指循环中的迭代吗?这是游戏吗?请添加一些实际的(最小的)类,这些类代表您正在谈论的内容,以及对实际场景的描述。你的问题太抽象和不清楚了,任何人都无法提供一个像样的答案。编辑后的代码包含了我到目前为止的代码