(ID / ParentID) liste à Liste hiérarchique
MyClass
se compose de ID
ParentID
et List<MyClass>
comme Children
J'ai la liste de MyClass
comme ce
ID ParentID
1 0
2 7
3 1
4 5
5 1
6 2
7 1
8 6
9 0
10 9
De sortie (liste Hiérarchique) List<MyClass>
1 __ 3
|__ 5__ 4
|__ 7__ 2__ 6__ 8
|__ 11
9 __10
Quelle est la façon la plus simple pour atteindre cet objectif dans linq?
P. S.: ParentID
pas triés
Edit:
Ma essayer:
class MyClass
{
public int ID;
public int ParentID;
public List<MyClass> Children = new List<MyClass>();
public MyClass(int id, int parent_id)
{
ID = id;
ParentID = parent_id;
}
}
initialiser les données de l'échantillon et d'essayer d'atteindre des données hiérarchiques
List<MyClass> items = new List<MyClass>()
{
new MyClass(1, 0),
new MyClass(2, 7),
new MyClass(3, 1),
new MyClass(4, 5),
new MyClass(5, 1),
new MyClass(6, 2),
new MyClass(7,1),
new MyClass(8, 6),
new MyClass(9, 0),
new MyClass(10, 9),
new MyClass(11, 7),
};
Dictionary<int, MyClass> dic = items.ToDictionary(ee => ee.ID);
foreach (var c in items)
if (dic.ContainsKey(c.ParentID))
dic[c.ParentID].Children.Add(c);
comme vous pouvez le voir, beaucoup d'éléments que je ne veux pas encore dans le dictionnaire
source d'informationauteur Rami Shareef
Vous devez vous connecter pour publier un commentaire.
Hiérarchique des données, vous avez besoin de récursivité - une boucle foreach ne suffira pas.
items
est la même liste que vous utilisez. Remarquez comment leSetChildren
méthode est appelée à l'intérieur de lui-même. C'est ce qui construit la hiérarchie.La récursivité n'est pas nécessaire ici, si vous construisez des relations parent-enfant avant de filtrer. Depuis que les membres de la liste restent les mêmes objets, aussi longtemps que vous associez à chaque membre de la liste avec ses enfants immédiats, toutes les relations nécessaires seront construits.
Cela peut être fait en deux lignes:
J'ai besoin de cette fonctionnalité et de comparer les deux méthodes et de trouver la méthode la 2e est plus rapide que le 1er :), maintenant dans ma base de données des cartes ou des enregistrements sont limitées, mais la 1ère méthode de prendre 4 fois plus de temps.
peut-être cela peut aider pour ceux qui sont conscients de temps.
1 méthode
méthode 2