J'ai un tableau de chaînes
days={ "6", "1", "2" }
Je veux le trier de plus en plus selon DayOfWeek
.
Par exemple, «1» est lundi, «2» est mardi, «6» est samedi. Nous sommes jeudi aujourd'hui.
Le plus proche est donc samedi, lundi, mardi. Le tableau final sera donc
string[] days={ "1", "2", "6" }
Je ne peux trouver aucune solution pour les trier. Comment puis-je les trier?
Merci d'avance.
3 Réponses :
La chaîne est un peu complexe à expliquer, j'utilise donc int à la place.
Laissez le jour de la semaine toujours pas plus petit qu'aujourd'hui, puis comparez.
Array.Sort(days, (d1, d2) => (d1 < today ? d1 + 7 : d1).CompareTo(d2 < today ? d2 + 7 : d2));
Forme courte
int[] days = { 1, 2, 6 }; int today; Array.Sort(days, (d1, d2) => { if(d1 < today) d1 += 7; if(d2 < today) d2 += 7; return d1.CompareTo(d2); });
Donc, utiliser int.Parse
pour extraire int
de string
rend les choses complexes comment?
Voyez-vous l'adverbe un peu
?
Non, tout ce que je vois est une excuse un peu étrange pour ne pas appeler int.Parse
, et comme vous pouvez le voir toutes les autres réponses données, utilisez int.Parse
- votre déclaration est un peu impair.
Vous pouvez utiliser LINQ pour cela:
string[] days = { "1", "2", "6" }; var today = (int)(DateTime.Now.DayOfWeek + 6) % 7; var result = days .GroupBy(x => int.Parse(x) > today) .OrderByDescending(x => x.Key) .SelectMany(g => g.OrderBy(x => x)); Console.WriteLine("[{0}]", string.Join(", ", result)); # [6, 1, 2]
Ce qui fait ce qui suit:
Je ne sais pas si vous voulez un tri sur place ou non, mais au cas où vous ne voudriez pas changer votre tableau (ou enchaîner plus de traitement au tableau), vous pouvez utiliser LINQ pour trier le tableau < pre> XXX
Vous pouvez également utiliser une logique similaire dans la méthode Array.Sort
, si vous souhaitez emprunter cette route
Comment sont-ils les plus proches
samedi, lundi, mardi.
dujeudi
? Quelle logique derrière votre plus proche ?Vous devrez écrire un IComparer personnalisé.
Je veux dire le jour le plus proche d'aujourd'hui. Il sera trié en fonction d'aujourd'hui. Lundi vient plus tard, mardi plus tard. @ Er-sho