Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504

Преобразовать Node в строку и наоборот

05.03.2013, 20:46. Показов 9535. Ответов 119
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеется класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CustomTree
{
    public class Node
    {
        public Node()
        {
            _children = new NodeCollection(this);
        }
        public Node(string name)
        {
            _children = new NodeCollection(this);
            this.Name = name;
        }
        public Node AddNode(string name)
        {
            var rv = new Node(name);
            this.Children.Add(rv);
            return rv;
        }
        Node _parent;
        public Node Parent
        {
            get
            {
                return _parent;
            }
            set
            {
                if (Parent != null || value == null)
                {
                    Parent.Children.Remove(this);
                }
                else
                {
                    value.Children.Add(this);
                }
                _parent = value;
            }
        }
        public string Name { get; set; }
        NodeCollection _children;
        public override string ToString()
        {
            var rv = new StringBuilder(Name);
            foreach (Node ch in Children)
            {
                SubNodeToString(ch, rv);
            }
            return rv.ToString();
        }
        public int Level
        {
            get
            {
                return Parent != null ? this.Parent.Level + 1 : 0;
            }
        }
        void SubNodeToString(Node n, StringBuilder sb)
        {
            sb.Append("\n" + repeat("\t", n.Level));
            sb.Append(n.Name);
            sb.Append(string.Format(" (Parent: {0})", n.Parent.Name));
            foreach (Node ch in n.Children)
            {
                SubNodeToString(ch, sb);
            }
        }
        string repeat(string s, int count)
        {
            var rv = new StringBuilder();
            for (int i = 0; i < count; i++) { rv.Append(s); };
            return rv.ToString();
        }
        public NodeCollection Children
        {
            get
            {
                return _children;
            }
        }
        public class NodeCollection : System.Collections.ObjectModel.Collection<Node>
        {
            internal NodeCollection(Node owner)
            {
                _owner = owner;
            }
            Node _owner;
            protected override void InsertItem(int index, Node item)
            {
                if (!this.Contains(item))
                {
                    base.InsertItem(index, item);
                    item._parent = _owner;
                }
            }
            protected override void RemoveItem(int index)
            {
                this[index]._parent = null;
                base.RemoveItem(index);
            }
        }
    }
}
класс формирует древовидную структуру,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var root = new Node("root");
            var c1 = root.AddNode("child1");
            var c2 = root.AddNode("child2");
            var c1_1 = c1.AddNode("child1_1");
            var c1_2 = c1.AddNode("child1_2");
            var c2_1 = new Node("child2_1");
            c2_1.Parent = c2;
            var c2_2 = c2.AddNode("child2_2");
            Console.Write(root.ToString());
            Console.WriteLine("\n");
            Console.WriteLine("Удаляем узлы\n");
            c2.Children.Remove(c2_2);
            c2_1.Parent = null;
            Console.WriteLine(root.ToString());
            Console.ReadKey();
задача состоит в следующем, нужно сформированное дерево преобразовать в object или строку, передать клиенту(с этим я справлюсь), затем у клиента из object или строки опять получить древовидную структуру
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2013, 20:46
Ответы с готовыми решениями:

Не удается неявно преобразовать тип "UnsafeStack.Node" в "UnsafeStack.Node*" - как исправить?
Узел: namespace UnsafeStack { public unsafe struct Node { public int value; public Node* next; ...

Преобразовать заглавные буквы в строчные и наоборот с использованием таблицы символов
Всем привет! Не подскажете как, допустим в слове &quot;ПриВеТ&quot;, преобразовать заглавные буквы в строчные и наоборот используя таблицу символов?...

Быстрые алгоритмы сборки байтового массива в строку и наоборот
Всем привет! Народ не поделитесь быстрым алгоритмом сборки байтового массива из строки (только цифры) и разборки массива в строку? К...

119
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
07.03.2013, 19:37  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Psilon Посмотреть сообщение
и как этим пользоваться ? ничего понять не могу как получить строку или массив байт и наоборот?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.03.2013, 19:48
kelod, яж говорю, не пользовался, не наю) Noob.Net с ними работал, у него спросите, он тут часто "отирается"
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
07.03.2013, 20:01  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
kelod, яж говорю, не пользовался, не наю) Noob.Net с ними работал, у него спросите, он тут часто "отирается"
поймать бы его

слушайте, знаете что я подумал, может быть мне как нибудь по другому дерево создавать? например вот этимTreeNode, только я опять не понимаю как это работает((( не могли бы помочь простенькое деревце набросать?
http://msdn.microsoft.com/ru-r... enode.aspx

ну или ещё как нибудь, главное что бы дерево было быстрое, и легко редактируемое
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.03.2013, 20:48
kelod, сделайте сами свой класс дерева, это не так уж сложно. А это только класс визуального представления, оно не очень подходит для подобной работы
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
07.03.2013, 21:07  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
kelod, сделайте сами свой класс дерева, это не так уж сложно. А это только класс визуального представления, оно не очень подходит для подобной работы
у меня не настолько хорошие знания языка, что бы сделать дерево(((да ещё что бы оно не тупило, я не волшебник, я только учусь
например в том дереве что щас использую, я половины не понимаю
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.03.2013, 21:11
kelod, ну подумайте, что вам от этого дерева нужно. А я помогу чем смогу Только в деталях думайте. например "Нужна вставка" не катит. А вот "нужна вставка, производится либо в самого левого сына либо в узел с таким-то идентификатором". НУ и в таком духе.
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
07.03.2013, 22:04  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
kelod, ну подумайте, что вам от этого дерева нужно. А я помогу чем смогу Только в деталях думайте. например "Нужна вставка" не катит. А вот "нужна вставка, производится либо в самого левого сына либо в узел с таким-то идентификатором". НУ и в таком духе.
давайте я вам расскажу для чего мне это нужно , а вы уж решите что мне там ещё нужно кроме того что я напишу

вообщем пишу я игрушку, ну как пишу, пытаюсь написать, игра состоит из сервера меню и серверов комнат, ну и клиентов конечно же вооот клиенты подключаются к меню, выбирают комнаты в которых играть, при этом данные о игроках хранятся на сервере, вернее данные о комнатах, в которых игроки, плюс кроме всего прочего нужно в момент загрузки уровня предавать из базы координаты появления игроков определённой команды на карте, и того имеем необходимость дерева, обычного не какого не бинарного, содержащего корень и узлы, не каких петель делать не нужно

корень
/ | \
<id комнаты1> <id комнаты2> <id комнаты3>
/ | \
<кол команд1> <кол ком2> <кол ком2>
/ \
<команда1> <команда2>
/ | \
<x> <y> <z>

ну это как пример, для наглядности, итого получаем:
- необходимость создания корня, в котором храниться его имя,
- возможность добавлять к этому корню любое количество потомков, имеющих тоже каждый своё имя,
- возможность добавлять к каждому потомку любое количество потомков, имеющих тоже каждый своё имя,
- желательно нужен ассоциативный способ доступа к полям
- сами поля могут быть все строками,
- номера идентификаторов в принципе не важно, информация будет храниться в именах
т.е. задание дерева может выглядеть так
<корень>add<потомок1>
<корень>add<потомок2>
<корень>.<потомок1>add<потомок11>
<корень>.<потомок1>add<потомок12>
- нужно иметь возможность получать количество потомков,
- обращаться к конкретному потомку
- осуществлять поиск детей определённого родителя по имени
- иметь возможность изменять и удалять потомков, причём сразу всех детей и поддетей
- не использовать рекурсию (по крайней мере функций)
- нужна внутренняя обработка исключений
- шустрая работа и отказоустойчивость
- собственно симое главное нужно как то передавать это дерево клиенту, передавать имею возможность либо строку либо массив байт
в принципе пока вроде всё, может что конечно забыл

видите как много нужно все го лишь для простого дерева

Добавлено через 6 минут
PS: собственно как это всё вставляться будет значения не имеет, главное результат на входе и что бы работало быстро, например на сколько я знаю массивы шустрее, если количество элементов известно, а на изменение размера нужно много времени и ресурсов, поэтому наверно лучше делать списками, хотя может есть и ещё какие нибудь представления, о которых я не знаю
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.03.2013, 23:57
kelod, тут уж лучше список списков списков... потому как на каждом уровне элементы гомогенные, а на различных - гетерогенные, а дерево по-умолчанию гомогенная сд. Но сериализация на фреймворке ниже 4 работать корректно все равно не будет.
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
08.03.2013, 00:06  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
kelod, тут уж лучше список списков списков... потому как на каждом уровне элементы гомогенные, а на различных - гетерогенные, а дерево по-умолчанию гомогенная сд. Но сериализация на фреймворке ниже 4 работать корректно все равно не будет.
ну да я же и говорю списки в списках,
а может быть заработает? ваши классы заработали А и В, а если не заработает, может можно как то по-другому упаковать можно?? я пробывал делать разделители в строке, типа: комната*команда1,команда2 , но как вы понимаете приходиться прогонять по всему дереву, собирать в строку , а на клиенте всё наоборот, вообщем не айс,
может быть покажите мне как сделать хотя бы основу, я попробую работает или нет
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
08.03.2013, 00:12
Здраствуйте) приятно что меня вспоминают,но я не такой уж прям спец по маршаллинге)

Цитата Сообщение от kelod Посмотреть сообщение
нужно сформированное дерево преобразовать в object или строку,
Я так понял вы хотите передать дерево куда-то. Передаете через строку потому что по другому не получается.

Контрольные вопросы разрешите:

1) Зачем вам маршаллинг?(штука то хорошая) Вы экономите трафик - это да,но будут несколько проблем с этим,но решим,если уже придется.
2) Как сериализация прошла? какая? пытались ХМЛ ?
3) Почему именно в строку? с строками в Шарпее нужно аккуратно.

Класс нужно пометить как сериализуемый ну и не все в шарпе можно сериализовать.

Добавлено через 3 минуты
Цитата Сообщение от kelod Посмотреть сообщение
давайте я вам расскажу для чего мне это нужно
По картинке из текста вижу что вам нужна полноценная БД.
Если вопрос будет решить сложно - отдам часть своих и чужих наработок для работы с ними.
честно - неудобно,сложновато,но это уважают)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.03.2013, 00:13
Кстати насчет БД, может тут стоит про WCF задуматься?..
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
08.03.2013, 00:16
Psilon, wcf почти не юзал,но это БД,обыкновенные бинарные деревья. По простому - можно это реализовать и сделать. Проблема в том,что очень сложно предугадать (используя сериализацию,маршаллинг или еще что) как мы будем работать с записями, потому что в любом провтыканном месте будет вылезать упаковка.
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
08.03.2013, 00:42  [ТС]
Цитата Сообщение от Noob.net Посмотреть сообщение
Здраствуйте) приятно что меня вспоминают,но я не такой уж прям спец по маршаллинге)


Я так понял вы хотите передать дерево куда-то. Передаете через строку потому что по другому не получается.

Контрольные вопросы разрешите:

1) Зачем вам маршаллинг?(штука то хорошая) Вы экономите трафик - это да,но будут несколько проблем с этим,но решим,если уже придется.
2) Как сериализация прошла? какая? пытались ХМЛ ?
3) Почему именно в строку? с строками в Шарпее нужно аккуратно.

Класс нужно пометить как сериализуемый ну и не все в шарпе можно сериализовать.

Добавлено через 3 минуты

По картинке из текста вижу что вам нужна полноценная БД.
Если вопрос будет решить сложно - отдам часть своих и чужих наработок для работы с ними.
честно - неудобно,сложновато,но это уважают)
а как передать через строку??
слово маршаллинг я узнал только севодня, посоветовали мне его потому что не работает сериализация
сериализация проходит отлично, массив байт из массива получаю, превращаю в строку, потом опять в массив байтов и провожу десериализацию, когда это происходит в том же проекте всё отлично работает, быстро и ошибок не каких, но перенося десериализацию на клиент, появились проблемы, вначале с файлом, я сделал dll и дал к ней доступ обоим проектам, всё вроде заработало, но выдаёт такую ошибку в момент десериализации
System.Runtime.Serialization.Serializati onException: Field "Collection`1+items" not found in class CustomTree.Node+NodeCollection
at System.Runtime.Serialization.Formatters. Binary.ObjectReader. ReadTypeMetadata (System.IO.BinaryReader reader, Boolean isRuntimeObject, Boolean hasTypeInfo) [0x00000] in <filename unknown>:0
строку передаю, потому что я использую Photon сервер, а он передаёт вроде только строки, по крайней мере пытался передать другое не получаеться,
классы у меня помечены, код того класса который я пытаюсь обрабытывать в самом начале я писал, единственное там теперь атрибуты сериализации перед классами стоят, но больше ничего не менял

Добавлено через 3 минуты
Цитата Сообщение от Psilon Посмотреть сообщение
Кстати насчет БД, может тут стоит про WCF задуматься?..
да в базе то у меня сохраняеться только нужная инфа о игроке, счёт, опыт, и прочее, все динамические данные хранятся на сервере в списках и массивах, поэтому тип базы тут не критичен, хоть муйскуль обыкновенный, к базе очень редко обращаются и запросы не большие пока и не сложные
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
08.03.2013, 00:49
kelod, можете выложить или показать файл который получает сервер.
Может он не получает файл полностью?

Может рискнем разобраться с сериализацией или сразу на амбразуру с маршалингом?

Добавлено через 2 минуты
Цитата Сообщение от kelod Посмотреть сообщение
я сделал dll и дал к ней доступ обоим проектам,
ну так не давайте доступ. В идеале сохранить где-то - потом передать на сервер - там разобрать.
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
08.03.2013, 00:54  [ТС]
Цитата Сообщение от Noob.net Посмотреть сообщение
kelod, можете выложить или показать файл который получает сервер.
Может он не получает файл полностью?

Может рискнем разобраться с сериализацией или сразу на амбразуру с маршалингом?

Добавлено через 2 минуты

ну так не давайте доступ. В идеале сохранить где-то - потом передать на сервер - там разобрать.
хотелось бы с сериализацией разобраться, я пробывал пересылать данные клиенту, потом обратно серверу, на сервере всё работало, значит всё правильно передаёться, я правда после этого с мерсиями фрамеворка эксперементировал, щас попробую опять, я не куда не сохранял, всё в памяти делал, файлы это же лишнее время и мне не нужно сохранять данные, они меняться могут быстро
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
08.03.2013, 00:58
kelod, может на них разная версия фреймворка?
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
08.03.2013, 01:11  [ТС]
да всё работает, щас только что проверил, переслал клиента, отправил назад серверу и попытался на клиенте десериализировать, на клиенте не фурычит, на сервере всё гуд

Добавлено через 4 минуты
Цитата Сообщение от Noob.net Посмотреть сообщение
kelod, может на них разная версия фреймворка?
да была разная сервер был 4, клиент 3,5 , когда я библиотеку делал, это заметил, понизил версию на сервере до 3,5, пересобрал разумеется, я бы увеличил на клиенте до 4, но unity почему то категорически отказывается работать с 4, само меняет на 3,5, версия unity 3.5.6f4, до четвёрки не обновляю, потому что пол проекта переделывать нужно будет

может быть вы мне подскажите, как фреймворк на юнити 4 поставить? может проблема решиться тогда
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
08.03.2013, 07:46
по поводу ошибки - попробуй сериализовать один и тот же тестовый объект на сервере и клиенте и сравни их побайтно в какой нибудь внешней проге.... и еще раз сверь классы нас сервере и клиенте...

и еще, мб нужно описать вручную параметры сериализациии? т.к. все равно передаешь данные которые можно к строке легко привести...
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
08.03.2013, 10:33
kelod, с юнити не работал,но 3.5 покатит для любых целей,пока что.

ждемс результатов теста)

и еще,попробуйте отправить на сервер какой-нибудь маленький объект,проверить контрольные суммы и десериализировать.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.03.2013, 10:51
Цитата Сообщение от Noob.net Посмотреть сообщение
с юнити не работал,но 3.5 покатит для любых целей,пока что.
насчет нерабочей сериализации в 3.5 вы уже почитали?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2013, 10:51
Помогаю со студенческими работами здесь

Преобразовать строку
Дано целое число N (&gt; 0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить...

Преобразовать строку
добрый день, знаю, тема заезженная, но походу у меня руки из ж*пы ((( есть такая строка я ее парсю с хтмл страницы и вывожу в листбокс,...

Преобразовать строку в массив
Привет всем, у меня есть вот такой код: WebClient client = new WebClient(); client.Headers =...

Преобразовать строку в int
Есть файл: 13 23 41 12 32 0 2 4

Преобразовать строку в дату
Помогите пожалуйста не могу сделать, как преобразовать время в строку,работаю c Excel, надо вытащить с ячейки время указанное в ней и ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru