У меня есть словарь, содержащий некоторые ключи в виде чисел.Каждый ключ имеет набор значений, которые содержат числа, «вложенные» в этот конкретный ключ (эти данные были извлечены из базы данных).
Некоторые примеры:
825имеет 838 внутри, а внутри 838 - 2941, а внутри 2941 - 556. Итак, 4 вложенных уровня.
825 содержит 27, что является только одним вложенным уровнем.
23 вложено в 838 (2 вложенных уровня), но в 23 есть 66, поэтому 3 вложенных уровня.
пример структуры:
dictionary {
825 : [838, 27],
838 : [2941, 23],
2941 : [556, 612],
23 : [66]
}
Я написал некоторый код, который может получить числа, вложенные в другие числа, так как одно из требований состоит в том, чтобы понять, насколько глубокой является вложенность.
// example: call function with key: 825
public int getDepth(int number, Dictionary<int, List<int>> nestedNumbers, int depth)
{
// 825 is in nestedNumbers
if (nestedNumbers.Keys.Contains(number))
{
// foreach number in 825 [838, 27]
foreach (var currentNumber in nestedNumbers[number])
{
// depth is now level 2
depth++;
// call the function again but with 838, which will now get nested groups in 838 [2941, 23]
return getDepth(currentNumber, nestedNumbers, depth);
}
}
return depth;
}
Мне нужносоставить список списков (или список массивов), которые содержат все вложенные уровни, например:
lvl1 lvl2 lvl3 lvl4
[[825, 838, 2941, 556],
[825, 27],
[825, 838, 23, 66],
[825, 838, 2941, 612]] <-- e.g. 612 is in 2941, 2941 is in 838, 838 is in 825
Но я не уверен, как это сделать, основываясь на функции, которая у меня уже естьнаписано.У кого-нибудь есть идеи, как мне этого добиться?