ОБНОВЛЕНИЕ: Первоначальная идея состояла в том, чтобы вложить объекты, но затем я понял, что наличие следа предков в каждом объекте будет достаточно, поэтому в заголовок были внесены изменения.
Я хочусоздать коллекцию объектов, с которыми я могу играть во время разработки (идея будет заключаться в том, чтобы поместить их в коллекцию MongoDB), но не могу понять, как сделать несколько глубин.
Объекты для этогоСценарий имеет только имя, идентификатор (автоинкремент) и строку, разделенную косой чертой, для родительских объектов каждого объекта.
Мне удалось заставить начальную рекурсию работать:
id Имя предка
1 / LFHVJULLCA
2/1 / OHOEKOOFZP
3/1/2 / PIUHBACFJV
4/1/2/3 / PYKUFZOHXS
5/1/2/3/4 / UJFUYENSQV
6/1/2/3/4/5 / SHLMWCKZUJ
7/1/2/3/4/5/ 6 / SFBHLQXTZL
8/1/2/3/4/5/6/7 / AHHHUGDZIX
9/1/2/3/4/5/6/7/8/ MKOODIMYXC
10/1/2/3/4/5/6/7/8/9 / OONOZOHYJH
но я хочу иметь второй или третий уровень родословной, чтобы у каждого элемента могли быть дополнительные потомки, обновлялся его род и добавлялся в основную коллекцию.
И вот где язастрял.Любые указатели, пожалуйста?
List<Thing> things;
int count;
void Main()
{
things = new List<Thing>();
count = 1;
int depth = 10;
int thingsPerThing = 3;
var thing = new Thing{ Ancestors = "/", id = count++, Name = "Name " + count};
things.Add(thing);
AddThing(depth, 0, thingsPerThing, thing);
things.Dump();
}
public class Thing
{
public int id{get;set;}
public string Ancestors{ get;set;}
public string Name{get;set;}
}
public void AddThing( int depth, int CurrentDepth, int thingsPerThing, Thing thing)
{
CurrentDepth++;
if( CurrentDepth < depth )
{
var newThing = CreateThing(thing);
things.Add( newThing );
AddThing( depth--, CurrentDepth, thingsPerThing, newThing);
}
}
public Thing CreateThing(Thing thing)
{
return new Thing{ Ancestors = thing.Ancestors + thing.id + "/", id = count++, Name = RandomString(10) };
}