C#中使用List类

System.Collection.Generic命名空间中的List<T>类的用法非常类似于System.Collection命名空间的ArrayLisy类。这个类实现了IList,ICollection和IEnumerable接口,这些接口的使用方法见第九章。

例:Racer类作为添加到集合的元素,表示赛车手,包括两个字段:名字和汽车,可用属性来访问

  public class Racer
        {
            private string name;
            public string Name
            {
                get
                {
                    return name;
                }
            }

            private string car;
            public string Car
            {
                get
                {
                    return car;
                }
            }

            public Racer(string name, string car)
            {
                this.name = name;
                this.car = car;
            }

            public override string ToString()
            {
                return name + "," + car;
            }
        }

       racer变量定义为List<Racer>类型。使用new操作符创建该类型一个新对象。这里使用List<T>类的默认构造函数。这个类的另一个构造函数为特定数量的元素预留了内存空间,还有一个构造函数负责从一个List<t>类型的集合中复制元素。

       因为List<T>类用具体的Racer类实例化,所以现在只能用Add()方法增加racer对象,在List<T>类中,Add()方法定义为void Add(T item).在以下示例代码中,创建实例,并添加到集合中。接着使用foreach语句,迭代集合中的每个赛手,并显示到控制台上:

  List<Racer> racers = new List<Racer>();
            racers.Add(new Racer("MS","F"));
            racers.Add(new Racer("JPM","MM"));
            racers.Add(new Racer("KR","MM"));
            racers.Add(new Racer("MW","WB"));
            racers.Add(new Racer("RB","F"));

            foreach (Racer r in racers)
            {
                Console.WriteLine(r);
            }

在List<T>类中,不仅可以使用枚举添加和访问元素,还可以插入和删除元素,清空集合,把元素复制到数组中。下面讨论更强大的功能。List<T>提供方法可以搜索和转换元素,是元素逆序,等等。

1 查找元素

   List<T>类提供了Find()和FindAll()方法,他们的声明如下:

      public T Find (Predicate <T> match)

       public T FindAll(Predicate <T> match)

这两种方法都把Predicate <T>作为参数。Predicate <T>是一个委托,它引用了个谓词方法。谓词是返回布尔值的方法。true表示有一个匹配,false表示没有。当为true是Find返回第一个匹配,FindAll返回所有元素。使用之前要先定义谓词。

         public class FindRacer
        {
            private string car;
            public FindRacer(string car)
            {
                this.car = car;
            }
            public bool DrivingCarPredicate(Racer racer)
            {
                return racer.Car == car;
            }
        }

要查找特定的赛手,应该使用F启动和初始化FindRacer类。使用List<T>类的FindAll()方法。FindAll方法,实例化一个谓词委托,这个谓词委托接受finder .DrivingCarPredicate方法。FindAll()返回一个List<Racer>类型的列表,再使用foreach迭代所有返回的赛手,并在控制台显示他们:

 List<Racer> racers = new List<Racer>();
            racers.Add(new Racer("MS","F"));
            racers.Add(new Racer("JPM","MM"));
            racers.Add(new Racer("KR","MM"));
            racers.Add(new Racer("MW","WB"));
            racers.Add(new Racer("RB","F"));

            FindRacer finder = new FindRacer("F");
            foreach (Racer racer in racers.FindAll(new Predicate<Racer>(finder.DrivingCarPredicate)))
            {
                Console.WriteLine(racer);
 
            }

2 执行操作

模板委托不仅可以在Find()/FindAll()方法中使用,还可以对每个元素执行一些操作。List<T>类提供了ForEach()方法,它使用Action<T>委托对集合中的每个元素执行操作.Action<T>委托的返回类型是void.

3 排序

4 类型转换

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值