J'ai deux ilistes (de types différents), A code> et
B code>.
Ils ont la même taille parce que
chaque A.g.id correspond exactement à un b.g.id. fort> p>
B code> est trié (en raison d'un
Orderby (B => B.SORTVAL) CODE>. Maintenant, je veux trier la liste
A code>.
(Les algorithmes de tri classiques aideraient si je voudrais avoir un
a.sortval code> et trier simplement
A code> sans l'aide d'une deuxième liste mais ce n'est pas le cas). P >
3 Réponses :
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.
Vous pouvez faire quelque chose comme ceci:
a = a.OrderBy(x => b.FindIndex(b.G.Id == x.gId));
J'ai fait et P> .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>
a = a.OrderBy(x => bIds.IndexOf(x.G.Id)).ToList();
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?