2011-01-20 25 views
2

私は以下の問題があります。私は、コレクションがあります。コレクションを繰り返して削除したいものを削除する

Collection<Vehicle> list = new Collection<Vehicle>(); 

code = 1,2,3, Description = "aaa" 
code = 10,438,13, Description = "bbb" 
code = 81,8623,362, Description = "ccc" 
code = 163,4312,53, Description = "ddd" 
... 

をしかし、私はそれらのいくつかを気に..私は気にリストがここにある、すなわちcodesCareAbout = "1 | 2 | 3 | 163 | 4312 | 53"

コレクションを繰り返して、私が気にしていない車を削除するか、または私が気にしている車が入っている別のリストにチェリーピッキングをする必要がありますか?

提案がありますか?

多くのおかげで、 ジェームズ

+3

コードのデータ型は? – Novice

+0

'code'プロパティの型は何ですか?それは文字列か何らかのコレクションですか? (そして 'codesCareAbout'は私にとっては文字列のように見えます;そうですか?) – LukeH

+0

関連するが同じではない:http://stackoverflow.com/questions/4718725/best-practice-to-avoid-invalidoperationexception-collection-was- –

答えて

4

あなたはあなたのリストを逆向きに繰り返し、forインデックスを使用してRemoveAtを使用してリストから削除してください:

for (int i = list.Count - 1; i >= 0; i--) 
{ 
    Foo item = list[i]; 

    if (IsFoobar(item)) 
     list.RemoveAt(i); 
} 

列挙子を列挙しているリストを変更することはできないため、forループを使用してインデックスカウントを変更する必要はありません。

また、あなたが提案したように、空のリストに必要なものを入力します。ただし、使用するリストを変更する必要があるかどうか、または新しいリストを作成するかどうかによって異なります。 LINQのリストをフィルタリング

+0

この例題ではAdamを動作させるために、IsFooBarはどうなるのでしょうか?ありがとうございます、 – JamesRadford

+0

@JamesRadfordの申し訳ありませんが、私は削除する項目を決定する方法についてのあなたの質問に答えていない、ちょうどきれいな方法でリストから削除する方法。 –

0

VEHICULEはコード(文字列)プロパティとDescriptionプロパティを持っていると仮定すると(質問が明確ではありません!)。

1 /リストのクローンを作成:var clone = list.ToList();

2 /反復と現在の項目が面白いかどうかを判断:

foreach(var item in clone) 
{ 
    if (! IsInteresting(item)) 
     list.Remove(item); 
} 

3/IsInteresting例えば、次のようになります。

foreach(var code in item.Code.Split(',')) 
{ 
    if (codesCareAbout.Split('|').Contains(code)) 
     return true; 
} 
+0

ああ申し訳ありません、Soverflowにちょっと新しくなりました。他の人に回答しました:) – JamesRadford

+0

「回答済み」とマークするには、緑のチェックボックスをクリックする必要があります答えの左にあるアウトライン。 – JYL

0

はクリーンコードを生成する:これは、両方のフィールドを想定

codesIcareAbout.Intersect(v.Codes).Any(); 

としてIsInterestingを実現することができる

var interestinglist = list.Where(v=> v.IsInteresting(v)); 

はコレクションではなく文字列であり、それは容易で固定されていますstring.Split()を呼び出します。

関連する問題