c# - 需要获取多个列表的所有组合,从每个列表中获取集合金额

标签 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 to 会是这样的:{"Manager", 1}, {"Developer", "3"}, {"PM", "1"}(不知道有多少键)

我需要返回 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

最佳答案

我会使用 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 中值的所有组合。

关于c# - 需要获取多个列表的所有组合,从每个列表中获取集合金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26879130/

相关文章:

c# - 单元测试时我怎么能 "uninitialize"WebSecurity?

java - 基于交叉点的碰撞检测,确定侧面碰撞

list - 悬停时是否可以更改嵌套列表的颜色?

java - 我正在尝试查找一棵树是否是另一棵树的子树并遇到 ArrayList 比较问题

algorithm - 在给定纬度/经度的情况下找到位置( zip 、城市、州)的最快方法

python:列表查找与字典查找

c# - 在元组列表中查找具有最高 Item1 值的元组 - 然后将其从列表中删除

c# - 在 asp mvc 4 中将 Json 文本解析为 C# 对象

c# - ASP.NET Web 应用程序无法使用自定义 Bootstrap 正确显示内容

c# - 在 stimulsoft 报告中处理关系时出现错误