1

私は a の繰り返しに本当に問題があり、list<list<object>>誰かに洞察を求めたいと思います。

http://i44.tinypic.com/wlqcfn.jpg

ご覧のlist<list<object>> posCheckOptionsとおり、32 個のリストを含む があり、各リストには x 個のオブジェクトが含まれています。つまり、0 の場合は 348、1 の場合は 325 などです。

たとえば、この 348 個のリストには、削除したい要素が重複しています。つまり、株の名前が同じである可能性があるので、VODAFONE と 4 回言うと、Vodafone が最初に発見されたときにそれぞれの株数を追加し、重複を削除したいと思います。

for(int k = 0; k<posCheckOptions.Count; k++)
{

int l = 0;
int m = 1;

while (l != m) 
{


    foreach(var x in posCheckOptions[k][l].name)
    {

         if(posCheckOptions[k][l].date != posCheckOptions[k][m].date 
            && posCheckOptions[k][l].strike != posCheckOptions[k][m].strike 
             && posCheckOptions[k][l].callPut != posCheckOptions[k][m].callPut)

               {
                    m++;
               }

               else
               {

           posCheckOptions[k][l].size = posCheckOptions[k][l].size + posheckOptions[k][m].size;

                                posCheckOptions[k].RemoveAt(m);

                                m--;

                }



                }

                    l++; m = l;
     }
}

私がコード化しようとしているのは、少なくともアイデアは、posCheckOptions[0][0] から開始し、要素posCheckOptions[0][0].dateposCheckOptions[0][1].date(4 つのフィールドを比較する)と比較することです (poscheckOptions型 T が 76 個の変数を持つクラスであるリストです)。比較したものが等しくない場合 (つまり、重複していない場合) インデックスを上のレベルに移動し、次のレベルに進みます。移動中に重複する要素が見つかった場合は、追加と削除を行い、インデックスを 1 つ戻して開始します。私が最後までたどり着くまで。

私は事実と混同しています.jで2つのインデックスを実行する必要があるかどうかはわかりませんposCheckOptions[0][j]。インデックスmが348要素すべてをループしたと言うと、jはj + 1にしか移動しないためです。2を削除すると、これは348ではないかもしれません....

どんなアドバイスでも大歓迎です:-)

4

3 に答える 3

0

次のことをお勧めします。

  1. IComparableリスト内のオブジェクトのタイプへのインターフェースを実装します。このようにして、型自体の内部に比較ロジックを格納できます。
  2. このタイプのリストを作成します ( のリストと同様posCheckOptions)。呼びましょうbigList
  3. のすべてのリストを繰り返し処理するposCheckOptions
  4. 含まれるリスト内の各項目を反復処理し、項目が に含まれているかどうかを確認しbigListます。存在する場合は、現在の内部リストから削除します。追加しない場合bigList
于 2013-07-21T11:39:43.553 に答える
-1

在庫情報を含む Type についていくつかの仮定を立てています。必要に応じて自由に調整してください。できることは、株式名を株式オブジェクトにマッピングする辞書を作成することです。ディクショナリ内のオブジェクトが存在する場合は更新するか、ディクショナリに追加します。

var allStock = mylist.SelectMany(l => l.Select(inner => inner));
var lookup = new Dictionary<string, Stock>();
foreach (var stock in allStock)
{
    if (!lookup.ContainsKey(stock.Name)) {
        lookup.Add(stock.Name, stock);
        continue;
    }
    lookup[stock.Name].Quantity += stock.Quantity;
}

これで、株式の名前を実際の株式にマッピングする辞書ができました。それが必要な場合は、値を繰り返してリストを取得します。

于 2013-07-21T11:48:23.287 に答える