2009-02-25 2 views
3

J'ai rempli une liste triée de dates (stockées sous forme de chaînes au format jj/mm/aaaa) à partir d'un fichier xml utilisant xpath. Toutefois, lorsque j'interroge la liste pour voir si une date existe dans la liste, j'obtiens toujours un résultat négatif (c'est-à-dire n'existe pas) même si j'ai codé en dur la chaîne de requête pour correspondre à une date dans la liste.BinarySearch n'ayant pas de résultats attendus

Cependant, lorsque vous effectuez une comparaison de chaînes sur l'index qui contient la chaîne interrogée, j'obtiens 0 indiquant que les chaînes sont identiques.

Quelles peuvent causer ce comportement étrange?

Comme demandé ici est le code

Vacances est peuplée par:

while (iter.MoveNext()) 
{ 
    XPathNavigator nav2 = iter.Current; 
    XPathNodeIterator iter2 = nav2.SelectDescendants("date", "", false); 
    while (iter2.MoveNext()) 
    { 
     date = iter2.Current.ToString(); 
     holidays.Add(date); 
    } 
} 

return holidays; 

Et la recherche est:

holidays = list.getHolidays(); 
if(holidays.BinarySearch(DateTime.Now.ToShortDateString()) > 0) 

Avec le code XML suivant retour:

<date>01/01/2009</date> 
<date>25/02/2009</date> 
<date>10/04/2009</date> 
<date>13/04/2009</date> 
<date>04/05/2009</date> 
<date>25/05/2009</date> 
<date>31/08/2009</date> 
<date>25/12/2009</date> 
<date>28/12/2009</date> 
+0

Pouvez-vous poster un exemple de code? – LukeH

+0

Quelle est votre implémentation actuelle? – Richard

+0

vérifiez votre ordre de tri? –

Répondre

10

Je bel Croyez que cela a à voir avec le format des chaînes. Votre liste est triée par jour, mois, puis année, ce qui n'est pas correct.

Vous devez formater vos chaînes comme ceci:

aaaa/mm/jj

Et puis trier la liste, et votre recherche devrait fonctionner. Si elles étaient des dates (comme dans,) alors la liste se trierait correctement, mais comme ce sont des chaînes, et que votre format ne supporte pas le tri basé sur les propriétés naturelles des chaînes, votre ordre de tri est complètement foiré .

+0

votre droit, si je inverse le format, il fonctionne, mais les dates vont être générées au format jj/mm/aaaa est-il un moyen rapide de convertir cela en aaaa/mm/jj? – CodeMonkey

+0

@codeMonkey: Regardez DateTime.ParseExact et il y a un format spécifié pour le format ISO aaaa-mm-jj ... – Richard

+0

@Richard: merci – CodeMonkey

Questions connexes