Si j'ai une liste de numéros:
1,2,3,4,5,6,7,8
et je veux commander par un numéro spécifique, puis montrer le reste. Par exemple, si je choisis "3", la liste devrait être:
3,1,2,4,5,6,7,8
Vous recherchez linq et c #. Merci
Vous pouvez utiliser une comparaison dans OrderBy
ou ThenBy
pour effectuer un tri conditionnel.
list.OrderByDescending(i => i == 3).ThenBy(i => i);
J'utilise OrderByDescending
parce que je veux d'abord des résultats correspondants (true
est "supérieur" à false
).
Peut-être quelque chose comme ça:
List<int> ls=new List<int>{1,2,3,4,5,6,7,8};
int nbr=3;
var result= ls.OrderBy (l =>(l==nbr?int.MinValue:l));
Quelques réponses trient déjà les derniers chiffres (ce qui peut être correct car vous ne montrez qu'une liste déjà triée). Si vous voulez que les nombres "non sélectionnés" soient affichés dans leur original, pas nécessairement triés au lieu d'être triés, vous pouvez le faire à la place;
int num = 3;
var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
Comme le souligne @DuaneTheriot, la méthode d'extension IEnumerable OrderBy effectue un tri stable et ne change pas l'ordre des éléments qui ont une clé égale. En d'autres termes;
var result = list.OrderBy(x => x != 3);
fonctionne aussi bien pour trier 3 en premier et garder l'ordre de tous les autres éléments.
public static IEnumerable<T> TakeAndOrder<T>(this IEnumerable<T> items, Func<T, bool> f)
{
foreach ( var item in items.Where(f))
yield return item;
foreach (var item in items.Where(i=>!f(i)).OrderBy(i=>i))
yield return item;
}
var items = new [] {1, 4, 2, 5, 3};
items.TakeAndOrder(i=> i == 4);