1

これは延期された実行の問題だと思いますが、多分私はポイントをいくらか見逃しています

私はループを持っているので

List<int> processed = new List<int>()
foreach(KeyValuePair<int,bool> tbl1 in tables.Where(z=>!processed.Contains(z.Key))){
   //do some stuff...etc 
   processed.Add(someInt);
}

これは非常に危険だと思いますが、実際には実行の延期によってこれが機能しますか?実際には反復しているように見えますが、「期待どおり」とやや穏やかに言いますが....質問は、おそらくこれは悪い考えだと思います。通常、反復しているコレクションをいじるのは悪いことです。

考え?ありがとう

明確にすることは大丈夫です..質問は

テーブルはこのように埋められていると言います

1、true 2、false 3、false 4、false 5、false 6、false

最初のラップはtbl1で{1、true}を取得し、2番目のラップで処理済みリストにsay 2を追加すると、tbl1で{3、false}が取得され、次に3と4が処理済みの3番目のラップに追加されて{5、 tbl1のfalse}これは予想されますか?

4周目に処理に6を追加した場合、次の周回で再び{5、false}を取得しますか?繰り返しますが、これは予想されることですが、これはやや混乱し、危険だと感じていると思いますが、おそらくそれは私にとってだけです-完全に意味があるわけではないので

n

4

3 に答える 3

3

繰り返すと、常に...の現在の内容がtables照会されるため、必要な処理が実行されますが、それは私が提案する方法ではありません:)processed

他のものとは別に、HashSet<int>各反復でのO(n)包含チェックを回避するために使用できます。

ただし、MoreLINQの機能が必要だとDistinctBy思います

foreach (var item in tables.DistinctBy(x => x.Key))
{
    // Process the item
}

確かに、処理されたキーのリストは残りませんが、おそらくそれは問題ではありません。

DistinctBy個人的には、LINQにまだなどがないのは残念だと思いますMaxByが、そこに行きます...

于 2012-04-30T10:32:26.837 に答える
0

テーブルをグループ化すると役に立ちますか?

var groups = tables.GroupBy(x=> x.Key);

計画に応じて、グループを内部的に注文できます。それとも私は何か間違ったのですか?

于 2012-04-30T10:36:59.753 に答える
0

それが悪いというあなたの本能は正しいと思います:-)

しかし、それはうまくいくはずです。

where 関数は結果を比較して結果を生成するため、繰り返しごとにラムダを実行し、キーがリストにあるかどうかを確認します。

また、パフォーマンスのために、そのリストを HashSet に変更する必要があります。

于 2012-04-30T10:37:17.707 に答える