List<T>还提供几个方法用来从列表中移除元素,这些方法同样可以移除指定的元素,也可以移除一个或多个满足指定条件的元素,它们包括Clear()、Remove()、RemoveAll()、RemoveAt()、RemoveRange()。
和Find()等方法一样,可以通过Predicate<T>委托指定要移除的元素需要满足的条件。Remove()等方法的定义如下:
public void Clear();
public bool Remove(T item);
public int RemoveAll(Predicate<T> match);
public void RemoveAt(int index);
public void RemoveRange(int index, int count);
其中,item是类型为T的要删除的特定元素,注意它只是一个引用。match是Predicate<T>类型的委托,用来表示被移除元素需要满足的条件。
index是从0开始的要移除元素的索引,count表示要移除的元素个数。
下面的示例代码将演示如何使用这些函数从列表List<T>中移除元素,
首先创建一个List<string>列表对象strLst,
通过Remove("abc")将"abc"从strLst中移除,
再通过RemoveAt(3)移除列表中索引为3的元素。
通过RemoveAll(BeginWithA)将strLst中移除所有以A开始的字符串。
通过RemoveRange(1,3)从strLst中移除索引为1开始的3个元素,
最后通过Clear()移除列表中剩下的所有元素。
示例代码:
static void UseRemove()
{
string[] ary = {"begin", "ABC", "abc", "Iaha", "here", "Ing", "Big", "Aig", "Amer", "end"};//准备数据
List<string> strLst = new List<string>();
strLst.AddRange(ary);//将数据添加到List<string>中
PrintList<string>("原数据", strLst);//打印数据
strLst.Remove("abc");//移除abc
PrintList<string>("第一次", strLst);
strLst.RemoveAt(3);//移除索引为3的元素
PrintList<string>("第二次", strLst);
strLst.RemoveAll(BeginWithA);//移除所有以A开始的字符串
PrintList<string>("第三次", strLst);
strLst.RemoveRange(1, 3);//移除从索引为1开始的3个元素
PrintList<string>("第四次", strLst);
strLst.Clear();//移除所有元素
PrintList<string>("第五次", strLst);
}
示例代码的输出如下,从中可以看出通过这些方法可以按照开发人员的需要从列表中移除不需要的元素。
注意,第5次由于所有元素都被移除,所以输出为空白。
原数据:begin ABC abc Iaha hehe Ing Big Aig Amer end
第一次:begin ABC Iaha hehe Ing Big Aig Amer end
第二次:begin ABC Iaha Ing Big Aig Amer end
第三次:begin Iaha Ing Big end
第四次:begin end
第五次:
注意:RemoveAll()只能移除列表中所有符合条件的元素,而Clear()是移除列表中任何元素。如果需要移除某个符合条件的元素,可以通过Find()先找到该元素的索引,然后通过RemoveAt()方法移除该元素。