Надеюсь, это не повторный вопрос. Я посмотрел и нашел похожие вопросы, но в этом случае недостаточно. У меня есть много элементов управления представлением дерева, и можно рекурсивно пересекать узлы по разным причинам. Однако мне часто приходится проходить через узлы, как если бы они были в списке. Я хотел бы создать функцию, которая создает Generic.List(of TreeNode)
из коллекции Nodes, без рекурсии, если это вообще возможно.Сбор узлов сборных деревьев в список без рекурсии
(без рекурсии чисто для осуществления делать это без рекурсии - Я понимаю, что может не возможно)
Эта функция позволит сэкономить много времени при повторном использовании через массивным раствор, где кодеры могли использовать простую парадигму For Each
для перемещения узлов.
Я видел технику «сплющить» коллекцию Nodes, используя C#, которая использует LINQ и рекурсию, но я не уверен, что синтаксис может быть преобразован в VB.NET. Поэтому, если есть какие-то умные функции VB, я могу сделать это для этой задачи - было бы очень полезно.
Есть много подобных вопросов и очень информативные ответы на SO, как этот: Enumerating Collections that are not inherently IEnumerable? ... который выдвигает на первый план стека ошибок переполнения в очень глубоких деревьев с помощью некоторых алгоритмов. Я надеюсь, что метод, который не использует рекурсию, не пострадает от ошибок переполнения стека, однако я готов, чтобы он был длинным, неуклюжим и медленным.
Я также готов ответить, что 'Это невозможно сделать без рекурсии'. Тем не менее, я хотел бы подтвердить или опровергнуть это утверждение, используя силу SO (этот форум)
Вы говорите, что вы уже знаете, как читать через 'управления TreeView' найти все узлы, так почему не может вы просто создаете список с результатами? Неясно, в какой части задачи вы столкнулись. –
@StevenDoggart Спасибо, да, я могу пройти и построить список, используя рекурсию. В вопросе предполагается выделить «нет рекурсии» - если это вообще возможно. – Grantly
В каком порядке вы хотите, чтобы элементы в списке находились? –