2009-02-25 14 views
3

xpathを使用して、xmlファイルから日付のソートされたリスト(dd/mm/yyyyの形式でストリングとして保管)を取り込みました。期待通りの結果が得られないBinarySearch

リスト内に日付があるかどうかを調べるときに、リスト内の日付と一致するようにクエリ文字列をハードコードしていても、常にマイナスの結果(つまり存在しません)が得られます。

しかし、クエリされた文字列を含むインデックスで文字列比較を実行すると、文字列が同一であることを示す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; 

AND検索は次のとおりです。次のXMLが返されると

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

<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

サンプルコードを投稿できますか? – LukeH

+0

現在の実装は何ですか? – Richard

+0

ソート順を再確認してください。 –

答えて

10

I belそれは文字列のフォーマットと関係があります。あなたは、日、月、年によってソートされていますが、これは正しくありません。

あなたはそうのようなあなたの文字列をフォーマットする必要があります。

YYYY/MM/

をDDとし、リストを並べ替え、および検索作業をする必要があります。

これらが日付の場合(DateTime)、リストは正しく並べ替えられますが、文字列であり、書式が文字列の自然なプロパティに基づいた並べ替えをサポートしていないため、並べ替え順序がすべて乱れます。

+0

あなたの権利は、フォーマットを逆にすると日付はdd/mm/yyyy形式で生成されますが、これをyyyy/mm/ddに変換する簡単な方法はありますか? – CodeMonkey

+0

@codeMonkey:DateTime.ParseExactを見て、ISOフォーマットyyyy-mm-ddに指定されたフォーマットがあります。 – Richard

+0

@リチャード:ありがとう – CodeMonkey

関連する問題