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 было бы примерно так: {"Менеджер", 1}, {"Разработчик", "3"}, {"PM "," 1 "} (неизвестно, сколько ключей есть)Необходимо получить все комбинации из нескольких списков, взяв наборы сумм из каждого списка
Мне нужно вернуть список всех возможных комбинаций allEmployees, чтобы он удовлетворял требованиям count в позицииToCountMap. Мне нужны комбинации из 1 менеджера, 3 разработчиков и 1 PM. Мой первый шаг состоял в том, чтобы создать новый словарь позиции для списка сотрудников с этой позицией.
var positionToEmployeeMap = new Dictionary<Position, List<Employee>>()
//Loop through allEmployees adding each to this dictionary
Теперь проблема становится, что у меня есть несколько списков, и мне нужно найти все возможные комбинации, принимая сумму, указанную в positionToCountMap из каждого списка.
Это хороший способ подойти к проблеме? Даже если это так, я не могу оборачивать голову тем, как я на самом деле переборщил бы это. Сначала я пытался думать о каком-то рекурсивном решении, но размер списка может быть достаточно большим, чтобы рекурсия не могла быть отличным выбором. Я застрял и мог использовать некоторые советы.
EDIT Я думаю У меня есть решение, хотя это не здорово, и я все еще люблю, чтобы получить некоторые советы.
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
Проблема в том, что она должна быть больше, чем одна из каждого списка. Как и в приведенном выше примере в OP, мне нужен один элемент из списка A, три из списка B и один из списка C. – user3715648
Также неизвестно, сколько ключей находится в словаре, поэтому я не могу просто предположить, что это будет только 3 списка. – user3715648