从列表中删除项目(.net 2.0)

时间:2012-01-11 15:10:13

标签: list .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);
}

我很好奇是否可以优化解决方案?我不能使用System.Linq,我只找到System.Data.Linq命名空间作为参考(Visual Studio 2005)

更新

我最好发布了我的真实代码。它是关于从gridview中删除列

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));
          }
     }
}

3 个答案:

答案 0 :(得分:4)

为什么不使用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);
}

这为您节省了另一个列表和多次迭代的成本。

答案 1 :(得分:0)

尝试RemoveAll:

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

ints.RemoveAll(MyPredicate);

或者如果您有权访问匿名代表:

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

此外,从SO中删除您的问题通常不是一个好主意,以便将来可能有相同问题的人可以阅读并从中学习。

答案 2 :(得分:0)

下面可以找到一个更精细的RemoveAll示例(指向.NET 2.0的链接):

List<T>.RemoveAll Method