2012-01-11 14 views
1

特定の条件を満たすリストからアイテムを削除したいと思います。リストからアイテムを削除する(.net 2.0)

//remove 1´s and 3´s from list of ints 

List<int> indexes = new List<int>(); 
List<int> ints = new List<int>(); 
ints.Add(1); 
ints.Add(2); 
ints.Add(3); 

foreach (int i in ints) 
{ 
    if(i == 1 || i == 3) 
    indexes.Add(ints.IndexOf(i)); 
} 

indexes.Reverse(); 

foreach (int index in indexes) 
{ 
    ints.RemoveAt(index); 
} 

ソリューションを最適化することができた場合、私は好奇心:私は、私がこれまでに思い付いた例を作ったのですか?私は、参照のみ(Visual Studio 2005の)として、私はより良い私の実際のコードを掲載していた

UPDATE

をSystem.Data.Linq名前空間を発見した、System.Linqのを使用することはできません。

List<int> indexes = new List<int>(); 

foreach (Type type in types) 
{ 
    foreach (DataControlField c in entriesGrid.Columns) 
    { 
      string header = c.HeaderText; 
      if (header == type.Name) 
      { 
       indexes.Add(entriesGrid.Columns.IndexOf(c)); 
      } 
    } 
} 
+1

...、あなたは確かに疑問を維持する必要があります。それがサイト全体のポイントです。 –

答えて

3

なぜList<T>.RemoveAll()を使用しないのですか?それは単純ではない場合

ints.RemoveAll(IsOneOrThree); // Remove all 1's or 3's 

private static bool IsOneOrThree(int i) 
{ 
    return i == 1 || i == 3; 
} 

(それは本当にありません推測、あなたが試みることができる):

for(int i= ints.Count - 1; i >= 0; i--) 
{ 
    if(ints[i] == 1 || ints[i] == 3) 
     ints.RemoveAt(i); 
} 

これはあなたに別のリストと複数の反復のコストを節約できます。

+0

あなたは正しいです、私は例としてintsを使用しましたが、とにかくありがとう – AGuyCalledGerald

+0

@ Jan-Frederik Carl - あなたの条件に一致する項目を削除するために、1つの逆ループを使用して2番目の例を見てください。 –

0

REMOVEALLをお試しください:

public bool MyPredicate(int i){ 
    return i == 3 || i == 5; 
} 

ints.RemoveAll(MyPredicate); 

または匿名のデリゲートへのアクセスがある場合:また

ints.RemoveAll((i) => i == 3 || i == 5); 

を、でているので、SOからあなたの質問を削除するには通常は良い考えではありません同じ質問をしている将来の人々は、これを読んで学ぶことができます。

0

REMOVEALLのための、より詳細な例は(.NET 2.0へのリンク)の下に見つけることができます:ソリューションが良好であれば

List<T>.RemoveAll Method

関連する問題