C# 需要获取多个列表的所有组合,从每个列表中获取集合数量 class员工 { int-id; 位置; } 阶级地位 { 字符串名; } 公共列表GetAllCombinitions(字典位置到CountMap,列出所有员工) { }

C# 需要获取多个列表的所有组合,从每个列表中获取集合数量 class员工 { int-id; 位置; } 阶级地位 { 字符串名; } 公共列表GetAllCombinitions(字典位置到CountMap,列出所有员工) { },c#,algorithm,list,C#,Algorithm,List,positionToCountMap是这样的:{“Manager”,1},{“Developer”,“3”},{“PM”,“1”}(不知道有多少个键) 我需要返回所有可能的员工组合列表,以满足positionToCountMap中的计数要求。我需要1名经理,3名开发人员和下午1点的所有组合。我的第一步是创建一个新的职位词典,以列出该职位的员工名单 class Employee { int id; Position position; } class Position {

positionToCountMap是这样的:{“Manager”,1},{“Developer”,“3”},{“PM”,“1”}(不知道有多少个键)

我需要返回所有可能的员工组合列表,以满足positionToCountMap中的计数要求。我需要1名经理,3名开发人员和下午1点的所有组合。我的第一步是创建一个新的职位词典,以列出该职位的员工名单

class Employee
{
    int id;
    Position position;
}

class Position
{
    string name;
}

public List<List<Tuple<Position, Employee>>> getAllCombinations(Dictionary<Position, int> positionToCountMap, List<Employee> allEmployees)
{
}
var positionToEmployeeMap=newdictionary()
//循环查看所有员工,并将每个员工添加到此词典
现在的问题是,我有几个列表,我需要从每个列表中找到所有可能的组合,取positionToCountMap中指定的金额

这是解决问题的好方法吗?即使是这样,我也不知道我会如何用暴力来对付它。我最初试图考虑一些递归解决方案,但是列表的大小可能足够大,递归可能不是一个好的选择。我陷入困境,需要一些建议

var positionToEmployeeMap = new Dictionary<Position, List<Employee>>()
//Loop through allEmployees adding each to this dictionary
编辑 我想我有一个解决办法,虽然不是很好,我还是很想得到一些建议

var positionToEmployeeMap = new Dictionary<Position, List<Employee>>()
//Loop through allEmployees adding each to this dictionary
var positionToEmployeeMap=newdictionary()
//循环查看所有员工,并将每个员工添加到此词典
var relevantLists=新列表();
//对于positionToCountMap中的每个键,找到positionToEmployeeMap中的列表,并将其添加到相关列表中
var allCombos=新列表();
//循环浏览相关列表。对于每个列表,递归地生成大小为N的子列表的所有可能组合,其中N是positionToCountMap中的数字。将所有组合的列表添加到allCombos
//递归地循环遍历allCombos,查找所有可能的组合,从每个列表中提取1个元素

我会使用LINQ。您可以通过以下操作执行类似于SQL
交叉联接的操作:

var positionToEmployeeMap = new Dictionary<Position, List<Employee>>()
//Loop through allEmployees adding each to this dictionary

var relevantLists = new List<Employee>();
//for each key in positionToCountMap, find the list in positionToEmployeeMap and add it to relevantLists

var allCombos = new List<List<Employee>>();
//Loop through relevantLists. For each list, recursively generate all possible combinations of sublists of size N, where N is the number in positionToCountMap. Add a list of all the combinations to allCombos

//recursively loop through allCombos finding all possible combinations taking 1 element from each list
var ListA=new List();
var ListB=新列表();
var ListC=新列表();
var result=(来自列表a中的
从列表b中的b开始
来自listC中的c
选择新的{a,b,c}).ToList();

这将生成一个列表,其中包含ListA、ListB和ListC中的所有值组合。

问题在于,每个列表中的值必须不止一个。就像上面OP中的例子一样,我需要列表A中的一个项目,列表B中的三个项目和列表C中的一个项目。而且,字典中有多少键是未知的,所以我不能仅仅假设它只有3个列表。