Sortierung

05/10/2009 - 17:06 von ChristianH | Report spam
Hi,

ich habe eine flache Liste mit Objekten. Die Objekte stehen in Parent/Child
Beziehungen zueinander, d.h. die Objekte haben die Eigenschaften "ID" und
"ParentID". Die Objekte werden nicht sortiert geliefert.

Ich möchte diese flache Liste auf mein eigenes Objekt abbilden:
class MyObject
{
List<MyObject> _children;
Guid ID {get;set;}
}

Ich bin auf der Suche nach einem eleganten Algorithmus, wie ich die flache
Liste auf meine Objekte abbilden kann.

Grüße
Christian
 

Lesen sie die antworten

#1 Martin Honnen
05/10/2009 - 19:17 | Warnen spam
ChristianH wrote:
Hi,

ich habe eine flache Liste mit Objekten. Die Objekte stehen in Parent/Child
Beziehungen zueinander, d.h. die Objekte haben die Eigenschaften "ID" und
"ParentID". Die Objekte werden nicht sortiert geliefert.

Ich möchte diese flache Liste auf mein eigenes Objekt abbilden:
class MyObject
{
List<MyObject> _children;
Guid ID {get;set;}
}

Ich bin auf der Suche nach einem eleganten Algorithmus, wie ich die flache
Liste auf meine Objekte abbilden kann.



Benutzt du .NET 3.5? Dann könnte man LINQ benutzen, etwa so, dabei wird
erst ein Dictionary<string, MyObject> gebildet, um die ID von
Foo-Objekten auf MyObject-Objekte abzubilden, dann wird die
Children-List mittels einer LINQ-Abfrage für jedes MyObject gebildet:

static MyObject GetObjectRoot(List<Foo> foos)
{
Dictionary<string, MyObject> objects =
foos.ToDictionary<Foo, string, MyObject>(f => f.ID, f => new MyObject()
{ ID = Guid.NewGuid() });

foreach (KeyValuePair<string, MyObject> kvp in objects)
{
kvp.Value.Children = foos.Where(f => f.ParentID ==
kvp.Key).Select(f => objects[f.ID]).ToList();
}

return objects[foos.First(f => f.ParentID == null).ID];

}

Klassen Foo und MyObject dann

public class Foo
{
public string ID { get; set; }
public string ParentID { get; set; }
}

class MyObject
{
public List<MyObject> Children { get; set; }
public Guid ID { get; set; }
}



Martin Honnen MVP XML
http://msmvps.com/blogs/martin_honnen/

Ähnliche fragen