Хорошо, учитывая выбор, я использовал бы объекты. Я создал бы объект для каждой записи, где каждый объект имеет children
набор, и сохраните их всех в массиве помощника (/хеш-таблица), где идентификатор является ключом. И блиц через набор однажды, добавляя детей к соответствующим дочерним полям. Простой.
, Но потому что Вы не забава путем ограничения использования некоторого хорошего ООП, я, вероятно, выполнил бы итерации на основе:
function PrintLine(int pID, int level)
foreach record where ParentID == pID
print level*tabs + record-data
PrintLine(record.ID, level + 1)
PrintLine(0, 0)
Редактирование: это подобно нескольким другим записям, но я думаю, что это немного более чисто. Одна вещь я добавлю: это чрезвычайно интенсивно SQL. Это противно . , Если у Вас есть выбор, пойдите путем ООП.
Один char
или wchar
представляет кодовую единицу UTF . Это означает, что сам по себе char
in может либо представлять символ ASCII (0–127), либо быть частью последовательности UTF-8, представляющей символ Unicode ( кодовая точка ). Только тип dchar
может представлять весь символ Unicode, поскольку в Unicode имеется более 65536 кодовых точек.
Приведение одного типа строкового типа ( string
, wstring
и dstring
, которые представляют собой просто динамические массивы символьных типов) не будут автоматически преобразовывать свое содержимое в соответствующее представление UTF. Для этого необходимо использовать функции toUTF8
, toUTF16
и toUTF32
из std.utf
(или toString
/ toString16
/ toString32
из tango.text.convert.Utf
, если вы используете Tango).
Пользователи реализовали строковые классы, которые будут автоматически использовать наиболее эффективное по памяти представление, которое может отображать каждый символ в одну кодовую единицу. Это позволяет быстро разрезать и индексировать с минимальными затратами памяти. Одной из таких реализаций является mtext Кристофера Э. Миллера.
Дополнительная литература: