C# - Calculer min date / max date à partir d'une Liste
J'ai une Liste qui contient les Dates :
List<string> StringDates;
[0]: "04.03.2010"
[1]: "09.03.2010"
[2]: "11.03.2010"
[3]: "12.03.2010"
[4]: "16.03.2010"
[5]: "18.03.2010"
[6]: "19.03.2010"
[7]: "23.03.2010"
[8]: "25.03.2010"
[9]: "26.03.2010"
À l'aide de C# quel est le meilleur/le plus court chemin pour trouver min date /max date à partir de cette liste ?
OriginalL'auteur Murtaza Mandvi | 2010-02-25
Vous devez vous connecter pour publier un commentaire.
J'aime la solution la plus simple.
O(n)
temps, à moins que vous l'avez mis dans un certain type de mémoire dans la structure qui vous permettrait de le résoudre dansO(logN)
temps mais alors il faudrait le commerce de cycles de processeur qui sont incroyablement pas cher pour le double de la mémoire de stockage qui est moins cher comparatif.Soyez prudent de la mondialisation de l'datetime format pour les dates représentées comme des chaînes de caractères!
Oui, j'ai pensé à ça, mais ne comprend pas c'est que j'étais paresseuse. Cette partie peut être pris de la Marque Byers réponse. Je vais lui donner upvote pour la ParseExact pièce, et l'appel qu'il fait. 🙂
vous ne pouvez pas battre le O(n) le temps, parce que vous avez de lire tous les commentaires pour trouver des valeurs min et max. Je suppose que, dans un scénario réel les valeurs ne sont pas triés, parce que sinon, ce ne serait pas de bon sens.
vrai vous auriez besoin de parcourir toute la liste pour l'ajouter à une collection différente, de sorte que le seul moyen de battre
O(N)
serait de commencer avec un certain type de structure de tas.OriginalL'auteur Jeffrey L Whitledge
Convertir
DateTime
à l'aide de ParseExact (ou TryParseExact) et ensuite utiliser Linq pour obtenir le Min et Max:Remarque que dans votre exemple, la liste est déjà triée en ordre croissant. Si vous pouvez garantir que ce sera toujours le cas, et que vous voulez de meilleures performances, vous pouvez simplement prendre le premier et le dernier élément qui serait O(1) au lieu de O(n). Mais ce qui précède est plus sûr de sorte que même si votre cotées sera probablement toujours être triés, vous ne devriez probablement pas faire cette optimisation, sauf si vous avez réellement besoin, juste au cas où, un jour, la liste ne vient pas dans l'ordre de tri.
OriginalL'auteur Mark Byers
utiliser linq!:
OriginalL'auteur Ryan Ferretti
Via Linq, vous pouvez le faire:
List<string>
. Le min et max des chaînes ne seront pas nécessairement les min et max de dates.OriginalL'auteur Scott Stafford
Ceci est similaire à @Jeffrey réponse, mais au lieu d'analyser chaque jour, il trouve d'abord le min et le max de dates en comparant ses valeurs de chaîne, puis il analyse les valeurs à la fin.
FindMinAndMaxDates
a unIList<string>
comme entrée. Comment feriez-vous pour représenter une valeur null DateTime? Comme une chaîne nulle? Vous avez juste à changer le WeirdComparer pour gérer les dates nulles, également utiliser une cohérence sémantique de nulle dates de comparaison, et enfin sauter le ParseExact si le min/max date est nulle.Ne pas utiliser des chaînes de caractères, uniquement à l'aide de DateTime nullable type de
Dans ce cas, vous n'avez pas besoin de la
WeirdComparer
fonction. Vous pouvez facilement obtenir en utilisant le comparateur par défaut pourDateTime?
. e.gif (Comparer<DateTime?>.Default.Compare(nullableDate, min) < 0)
.OriginalL'auteur Fede
Je sais que ce n'est pas une réponse directe à votre question, mais peut aider les autres si ils viennent ici à la recherche de quelque chose de similaire.
J'ai couru à travers cette question aujourd'hui, tout en essayant de trouver le max de la date à partir d'une liste d'objets. Parfois, il n'y aura pas une valeur à la date d'objets, donc j'ai eu de comprendre comment l'utilisation d'essayer d'analyser avec mon linq.
À partir d'un mélange de ce que la Marque utilisée ici je suis venu avec cette pour résoudre mon problème,
OriginalL'auteur A Kimmel