BinarySearch не дал ожидаемых результатов
-
06-09-2019 - |
Вопрос
Я заполнил отсортированный список дат (хранящийся в виде строк в формате дд/мм/гггг) из XML-файла, используя xpath.
Однако при запросе списка, чтобы узнать, существует ли в списке дата, я всегда получаю отрицательный результат (т.не существует), хотя у меня жестко закодирована строка запроса, соответствующая дате в списке.
Однако при сравнении строк по индексу, содержащему запрошенную строку, я получаю 0, указывающий, что строки идентичны.
Что может вызвать такое странное поведение?
По запросу вот код
Праздники заполнены:
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;
И поиск такой:
holidays = list.getHolidays();
if(holidays.BinarySearch(DateTime.Now.ToShortDateString()) > 0)
Возвращается следующий XML:
<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>
Решение
Я считаю, что это связано с форматом строк.Ваш список сортируется по дню, месяцу, затем году, что неверно.
Вам нужно отформатировать строки следующим образом:
гггг/мм/дд
А затем отсортируйте список, и ваш поиск должен работать.
Если бы это были даты (как в DateTime
), то список будет сортироваться правильно, но поскольку это строки, а ваш формат не поддерживает сортировку на основе естественных свойств строк, ваш порядок сортировки испорчен.