Я буду честен;Мне очень трудно понять, как предложение Итая не имеет смысла.
Вот требование, которое вы заявили:
Я хочунаписать метод, который будет возвращать определенный узел, учитывая указанный Code
.
То есть Code
уникален, я так понимаю?Тогда ничто не мешает вам поместить все ваши Node
объекты в Dictionary<string, Node>
.
В ваших комментариях к ответу Итая вы говорите следующее:
Я понял, что словарьэто плоский индекс, я просто еще не понимаю, как этот индекс попадет в мою иерархическую структуру данных и получит правильный узел.
Если вы имеете в виду, вы не понимаете, как словарьузнает, где находится Node
в структуре данных , потому что это не так.Имеет ли это значение?Вы не указали в своих требованиях, что хотите знать, где находится узел в структуре данных;Вы только указали, что хотите получить узел .Для этого словарю нужно только знать, где находится узел в памяти, а не в какой-то совершенно отдельной структуре данных.
Чтобы привести упрощенный пример (и я прошу прощения, если я оскорбляю ваш интеллект здесь, но потерпите меня, так как это может, по крайней мере, прояснить смысл для кого-то еще), предположим, что у вас был простой LinkedList<int>
, содержащий все уникальные целые числа.Затем вы перечисляете этот список и используете его для построения Dictionary<int, LinkedListNode<int>>
, идея в том, что вы хотите быстро найти узел на основе его значения.
Нужно ли в словаре знать, где в связанном списке каждый узел есть?Конечно, нет - только там, где это в памяти.Как только вы нашли свой узел, основываясь на его значении в O (1), используя словарь, вы, конечно, можете легко перемещаться по связанному списку вперед или назад, используя сам узел, который случайно (по замыслу) знает связанный списоксодержащий его.
То же самое с вашей иерархической структурой, только немного сложнее, чем связанный список.Но применяется тот же принцип.