:: Не фоксом единым
C# работа с деревьями
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Понадобилось извлечь данные из закодированного в DER (ASN.1) файла. Нашёл github.com , хватило одного ASN1Decoder.cs что бы распарсить файл. В итоге имеется объект, класс которого описан:

public class ASN1Element
{
private byte [] _data; // данные
private int _position;
private int _valueLength;
private int _valuePosition;
private ArrayList _childs; // ссылка на другие узлы

где ArrayList _childs - это объекты класса ASN1Element. Т.е. получилось дерево. Встал вопрос - как получить нужные данные из этого дерева? Понятно, что можно написать рекурсивную функцию, которая просматривает дерево, находит элемент с нужным значением в _data и возвращает значение. Точнее, она уже написана, но грызут сомнения - может вопрос можно решить как то иначе? Например, с помощью LINQ? Или, может в C# есть какая то стандартная библиотека для работы с деревьями?

Господа - какие есть мысли по этому поводу?
Ratings: 0 negative/0 positive
Re: C# работа с деревьями
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Хм-м-м. Стандартный метод работы с деревьями это и есть рекурсия. Не думаю что любого рода обёртка (будь то LINQ или ещё какой-либо проект) будет лучше и проще чем простая рекурсивная, или на стеке основанная (как замена "чистой" рекурсии) функция...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: C# работа с деревьями
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Т.е. использовать для поиска в дереве самописную рекурсивную функцию и не париться по этому поводу...
Ratings: 0 negative/0 positive
Re: C# работа с деревьями
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Я бы именно так и сделал
Если деревья сильно глубокие (но я уверен что DER-файл это явно не тот случай), то не рекурсивную, а на стеке основанную - т.е. вместо забивания стека рантайма рекурсивными вызовами (т.к. ошибки переполнения стека очень "неудобные" для обработки) просто в цикле так или иначе пользовать объект System.Collections.Generic.Stack<T> - а то и плоские коллекции, если задача позволяет.


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 5 (Гостей: 5)

© 2000-2024 Fox Club 
Яндекс.Метрика