1

値を検索するために使用する配列があります。最初の 2 つの値を使用して n 行を取得します。たとえば、最初の列に 2 があり、2 番目の列に 7 があるすべての行。 これらの値を取得するための最速の (マイクロ最適化を意味する) 方法は何ですか? for ループを使用して値を取得します。

 int l = SpreadLookupTable.GetLength(0);

 for (int iCombo = 0; iCombo < l; iCombo++) {                        
      bool o = SpreadLookupTable[iCombo, 0] == perWeek 
      && SpreadLookupTable[iCombo, 1] == workDays;

     if (o) {
         // do stuff
     }
 }

編集: 約60行しかありません。3 つのネストされた配列を作成して、最初の 2 列を t[2][7] のように直接インデックスとして使用できるようにすると、本当に必要な行だけを反復処理できます。それはより速いでしょうか?

テーブル:

private static int[,] SpreadLookupTable = {
                                                  {2, 7, 1, 0, 0, 1, 0, 0, 0},
                                                  {2, 7, 1, 0, 0, 0, 1, 0, 0},
                                                  {2, 7, 0, 1, 0, 0, 1, 0, 0},                                                                                                        
                                         ...
                                                  {2, 3, 1, 1, 0, 0, 0, 0, 0},
                                                  {2, 3, 1, 0, 1, 0, 0, 0, 0},
                                                  {2, 3, 0, 1, 1, 0, 0, 0, 0}
                                                  };
4

3 に答える 3

1

条件に一致する iCombo のインデックスのリストを保持できるため、すべてのデータを最初にループした後、その後はすべて、インデックスをループして比較をスキップするだけで済みます。

于 2010-08-05T14:30:58.353 に答える
1

テーブルが静的で、検索値の組み合わせがわかっている場合は、両方の検索検索値をハッシュに結合し、辞書とリストを使用してそのハッシュをテーブルにマップできます。

検索値がわからない場合は、複数レベルの辞書 (または複数の辞書) を作成して、同じ手法を使用できます。

(私はニール N とあなたの編集とクロスポストしましたが、これは基本的に同じ一般的なアイデアのバージョンです: インデックスをある種のルックアップ構造に前処理します。辞書またはリストがより効率的かどうかは、あなたの特性に依存しますデータ。)

于 2010-08-05T14:34:00.940 に答える
1

私の同僚が行っていたプロジェクトで私が見た例は、彼が複数列のグリッド ビューを取得し、セルを配列セットにエクスポートしたことです。新しい配列を使用して "A" の行にインデックスを付け、別の新しい配列を使用して "B" の行にインデックスを付けました。次に、Array1 と Array 2 のインデックス位置が一致するものにインデックスを付けるために作成された次の配列。これを使用すると、これらの行をマイクロ管理して、

 if (o) {
         // do stuff
    }

したがって、行が設定された基準を満たすように見えるので、行を処理する必要がすべて取り除かれます。

     bool o = SpreadLookupTable[iCombo, 0] == perWeek 
  && SpreadLookupTable[iCombo, 1] == workDays;

私たちのテストでは、アプリの作業時間が約 13% 短縮されましたが、それほど多くはありませんが、処理する行が数千行あったため、60 行では、インデックスのサイズが小さいため、さらに改善される可能性があります。

于 2010-08-05T14:44:30.187 に答える