需要获取多个列表的所有组合,从每个列表中获取集合数量

时间:2014-11-12 04:12:00

标签: c# algorithm list

class Employee
{
    int id;
    Position position;
}

class Position
{
    string name;
}

public List<List<Tuple<Position, Employee>>> getAllCombinations(Dictionary<Position, int> positionToCountMap, List<Employee> allEmployees)
{
}

positionToCountMap将是这样的:{&#34;经理&#34;,1},{&#34;开发人员&#34;,&#34; 3&#34;},{&#34; PM& #34;,&#34; 1&#34;}(不知道有多少把钥匙)

我需要返回allEmployees的所有可能组合的列表,以便它满足positionToCountMap中的计数要求。我需要1个经理,3个开发人员和1个PM的组合。我的第一步是为具有该职位的员工列表创建一个新的职位词典。

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

现在问题变成了我有几个列表,我需要找到所有可能的组合,从每个列表中获取positionToCountMap中指定的数量。

这是解决问题的好方法吗?即使是这样,我也无法理解我实际上是如何暴力破坏这一点的。我原本试图考虑一些递归解决方案,但列表的大小可能足够大,以至于递归可能不是一个很好的选择。我被困了,可以使用一些建议。

修改我有一个解决方案,虽然它不是很好,我仍然希望得到一些建议。

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

1 个答案:

答案 0 :(得分:-1)

我使用LINQ。您可以使用以下命令执行类似于SQL CROSS JOIN操作的操作:

var ListA = new List<object>();
var ListB = new List<object>();
var ListC = new List<object>();

var result = (from a in listA
  from b in listB
  from c in listC
  select new { a, b, c }).ToList();

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