List<T>.RemoveAll方法使用示例

List<T>.RemoveAll允许你自定义删除条件,这主要依赖于它的参数,我们先看下它的签名:

public int RemoveAll(Predicate<T> match);

Predicate是一个委托,我们再看下它的定义:

public delegate bool Predicate<T>(T obj);

List<T>.RemoveAll方法在执行过程中,会将每项值传给函数match,若match返回true,则该项将被删除,否则不删除该项。下边我们来看个例子:

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化
            List<int> ids = new List<int>();
            for (int i = 1; i <= 10; i++)
                ids.Add(i);

            //删除前
            foreach(int id in ids)
                Console.WriteLine(id);
            Console.WriteLine("-----------------------------");

            //删除
            ids.RemoveAll(Predicate);

            //删除后
            foreach (int id in ids)
                Console.WriteLine(id);
            
            Console.Read();

        }

        /// <summary>
        /// 定义List.RemoveAll要移除的元素应满足的条件
        ///     当传入的项满足移除条件时返回true
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        static bool Predicate(int id)
        {
            return id % 2 == 0 ? true : false;
        }

    }
}

执行结果:

引用内容 引用内容
1
2
3
4
5
6
7
8
9
10
-----------------------------
1
3
5
7
9

类似的例子并不少见,JavaScript的Array.sort方法也是根据参数(函数)的返回值来判断任意两项的大小从而实现数组按自定义方式排序的。

评论: 0 | 引用: 0 | 查看次数: 10501
发表评论
登录后再发表评论!