Я давно решил эту проблему для октавы / матлаба, теперь мне нужно что-то для C #.Задача состояла в том, чтобы объединить две октавные структуры в одну.Я не нашел ни инструмента слияния, ни подходящего сериализатора, поэтому мне пришлось кое о чем подумать.
Самым важным концептуальным решением было разделить структурное дерево на строки с полным путем и содержанием отпуска.
Основной идеей было
- Сериализация структуры в строки, где каждая строка представляет базовую переменную (Matrix, string, float, ...)
- Массив или матрица структуры будет иметь индекс в пути.
- объединить два результирующих текстовых файла, отсортировать строки
- обнаружить коллизии и обработать коллизии (очень легко, потому что одни и те же свойства будут расположены непосредственно под друг другом после сортировки строк)
- выполнить десериализацию
Пример:
>> s1
s1 =
скалярная структура, содержащая поля:
b =
2x2 struct array containing the fields:
bruch
t = Textstring
f = 3.1416
s =
scalar structure containing the fields:
a = 3
b = 4
будет сериализовано до
root.b(1,1).bruch=txt2base('isfloat|[ [ 0, 4 ] ; [ 1, 0 ] ; ]');
root.b(1,2).bruch=txt2base('isfloat|[ [ 1, 6 ] ; [ 1, 0 ] ; ]');
root.b(2,1).bruch=txt2base('isfloat|[ [ 2, 7 ] ; [ 1, 0 ] ; ]');
root.b(2,2).bruch=txt2base('isfloat|[ [ 7 ] ; [ 1 ] ; ]');
root.f=txt2base('isfloat|[3.1416]');
root.s.a=txt2base('isfloat|[3]');
root.s.b=txt2base('isfloat|[4]');
root.t=txt2base('ischar|Textstring');
Преимущество этого метода в том, что он очень прост в реализации и удобочитаем.Сначала вы должны написать две функции base2txt и txt2base, которые конвертируют базовые типы в строки и обратно.Затем вы просто идете рекурсивно по дереву и пишете для каждого свойства структуры путь к свойству (в данном случае разделенный ".") И содержимое в одну строку.
Большой недостаток в том, что по крайней мере моя реализацияэто очень медленно.
Ответ на второй вопрос: уже есть что-то подобное?Я не знаю ... но я искал некоторое время, поэтому я так не думаю.