Étant donné le type:Comment pouvez-vous réorganiser les éléments d'un tableau en fonction de ses dépendances? et détecter également une dépendance cyclique
class Field{
public string Name{get;set;}
public string[] DependsOn{get;set;}
}
Disons que j'ai un tableau de Field
articles:
List<Field> fields = new List<Field>();
fields.Add(new Field() { Name = "FirstName" });
fields.Add(new Field() { Name = "FullName",
DependsOn = new[] {"FirstName","LastName"}});
fields.Add(new Field() { Name = "Age",
DependsOn = new[] { "DateOfBirth" } });
fields.Add(new Field() { Name = "LastName" });
fields.Add(new Field() { Name = "DateOfBirth" });
Il est donc clair que nous obtenons nos articles dans l'ordre suivant:
- Prénom
- Nom complet
- Âge
- LastName
- DateOfBirth
Ma première question: Quelle est la meilleure façon de réorganiser les éléments dans ma liste/tableau afin que les colonnes dépendantes (FullName & âge) sont placé après les colonnes dont ils dépendent-à-dire quelque chose comme ceci:
- FirstName
- la stName
- FullName
- DateOfBirth
- Âge
Alors champs comme Âgetoujours venir après DateOfBirth dont elle dépend.
Ma deuxième question: Y at-il un moyen de détecter dépendances cycliques? à savoir quand
Field1
dépend deField2
et
Field2
dépend deField3
et
Field3
dépendField1
Nous ne sommes pas pris dans un cercle. par exemple. Lorsque vous avez terminé vos études, vous avez besoin de 2 ans d'expérience professionnelle pour trouver un emploi. Mais pour obtenir l'expérience de travail, vous devez d'abord avoir le travail.
C'est difficile parce que vous essayez de trier en fonction d'un ordre partiel, pas un ordre total. Les algorithmes de tri standard ne s'appliqueront probablement pas. – dsimcha
ctuellement, les travaux de tri topologique – Tawani