0

これは小さな論理的な質問です。私のデータグリッドには、日時の値が時系列に並んでいます。ユーザーが順不同の日時を入力した場合、プログラムは順不同の行を強調表示する必要があります。例: これは最初の注文です。

10/5/2010 11:59:59  
10/6/2010 00:00:00  
10/6/2010 11:59:59

ユーザーが入力したとします。

   10/5/2010 11:59:59   
    ***10/7/2010 00:00:00***    
    10/6/2010 11:59:59  
    10/7/2010 00:00:00 

これ10/7/2010 00:00:00は順不同で、プログラムは正しく動作します。

ユーザーが入力したとします。

10/5/2010 11:59:59
10/6/2010 00:00:00
***10/5/2010 11:59:59***
10/7/2010 00:00:00

これ10/5/2010 11:59:59がアウトまたはオーダーの列です。しかし、プログラムは強調しています10/6/2010 00:00:00

上記を確認するための私のコードは次のとおりです。

for (int nRow = 1; nRow < pSeries.Count; ++nRow)
{
    // validation1
   if (!check_range(nRow, i, pSeries[nRow].tim))
   {
       row = nRow;
       err = (short)err_typ.e_out_range;
       goto err_exit;
   }
}

public bool check_range(int np, int nCol, DateTime dt)
{
    DataArray pdata = GetDataArray(nCol);

    bool valid = (np <= 0 || pdata[np - 1].Datetim <= dt) &&
         (np >= (pdata.Count - 1) || dt <= pdata[np + 1].Datetim );
    return valid;
}

DataArray日時値のユーザー定義配列です。pSeriespDataタイプDataArrayです。だから私が言うとき、pdata[np - 1].DateTimeそれはdatetimeセルを指します。

4

2 に答える 2

0

あなたのコードは、シーケンス (A、C、B、D) の場合、C が A と B の間にないため、C は順不同と見なされることを示しています。

シーケンス (5.0、6.0、5.1、7.0) の場合、現在のコードでは 6.0 が 5.0 と 5.1 の間に収まらないため、6.0 は不適切であることがわかります。ただし、問題の説明は、行が場違いであるかどうかを判断するための別の基準があることを示していますが、これはコードでは表されていません。

追加のルールは次のようなものだと推測します: N+1 が N-1 と N の間に収まる場合、N+1 は場違いな行であり、行 N ではありません。

シーケンス (5.0、6.0、5.1、7.0) について、この新しいルールを最初にテストすると、5.1 が不適切な行としてフラグが立てられます。新しいルールが false を返す場合、既存のコードを 2 次テストとして続行します。

おそらく、これをテストするより簡単な方法は、各行の日付が前の行の日付以上であることを確認することです。2 つ以上ではなく、行ごとに 1 つだけ比較します。このテストに失敗する行の日付に到達したら、「周りを見回して」「原因」が前の行にあるのか現在の行にあるのかを判断する必要があります。この「ルックアラウンド」コードは、エラー状況でのみ使用されるため、どれだけ高速であっても問題ありません。

于 2012-08-10T18:29:37.193 に答える
0

順不同エントリを構成するものをより正確に定義する必要があります。日付 {A, C, B} を入れた場合、C は B の後に来るはずなので場違いだと思いますか、それとも C の前にあるはずなので B は場違いだと思いますか?

質問を読み直した後、ユーザーは一度に 1 つの日付しか入力できず、新しいエントリごとに有効な注文を確認する必要があるようです。これにより、物事が少し単純化されます。ユーザーが入力した日付を見つけて、その前後のリストの日付と比較する必要があります。その範囲内に収まらない場合は、新しい日付を強調表示します。現在、正しい範囲のすべてのエントリをチェックしているため、本来よりも遅いエントリをリストに追加すると、前のエントリは正しくないとして ping されます。エントリを本来よりも早くリストに追加すると、アルゴリズムが機能します。

于 2012-08-10T18:03:53.720 に答える