-1
votes

Comment trier un IList avec la base d'une autre liste de tri en C #?

J'ai deux ilistes (de types différents), A et B . Ils ont la même taille parce que chaque A.g.id correspond exactement à un b.g.id.

B est trié (en raison d'un Orderby (B => B.SORTVAL) . Maintenant, je veux trier la liste A . (Les algorithmes de tri classiques aideraient si je voudrais avoir un a.sortval et trier simplement A sans l'aide d'une deuxième liste mais ce n'est pas le cas).


2 commentaires

Une alternative à faire dans le C # -Code pourrait être une procédure stockée (SQL). Mais je devrais écrire une nouvelle question pour ça


"Je n'ai pas trouvé de dupliquer pour ce cas!" Avez-vous essayé quelque chose au-delà de la recherche d'une duplication exacte? Quels sont vos propres atelps jusqu'à présent?


3 Réponses :


1
votes
var dic = a.ToDictionary(x => x.gId);

var aSorted = b.Select(x => dic[x.G.Id];
should do itBasically creating a dictionary to identify a's items by their gId and then using it while looping through b's (sorted) items should return the items in a as ordered in b.The dictionary is used to make lookups faster than a scan.

0 commentaires

0
votes

Vous pouvez faire quelque chose comme ceci:

a = a.OrderBy(x => b.FindIndex(b.G.Id == x.gId));


0 commentaires

0
votes

J'ai fait .include (x => x.g) code> lors de l'initialisation B code>. Ensuite, j'ai défini et initialisé une nouvelle liste BIDS = B.Sélectionnez (B => BGID) .tolist (); Code>

et P>

a = a.OrderBy(x => bIds.IndexOf(x.G.Id)).ToList();


0 commentaires