zoukankan      html  css  js  c++  java
  • List泛型集合常用方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace List泛型集合
    {
        class Program
        {
            static void Main(string[] args)
            {
      //ArrayList的好处是长度可变,可以往里面放任意类型的数据。但是当我们从ArrayList中取数据的时候,取出来的全部是Object类型的数据,最终还要将这个Object类型的数据转换成我们需要的类型数据。这期间就可以发生拆箱操作。费时间。而List泛型集合就能很好的解决这个问题。
      //--------------------------------------Add(); AddRange()添加
      //一旦你确定了泛型集合的类型,那么泛型集合里就只能存放该类型数据了。
      //创建泛型集合对象
      List<int> list = new List<int>();
      list.Add(1); //单List的类型是int的时候。Add(int item) Add方法的参数是int类型的。说明只能网里面存int类型的数据
      List<string> listStr = new List<string>();
      listStr.Add("abc");//单List的类型是string的时候。Add(string item) Add方法的参数是string类型的。说明只能网里面存string类型的数据
      List<int[]> listArray = new List<int[]>(); //list里面接收的是一个int[]数组。
      listArray.Add(new int[] { 1, 2, 3 });
      List<int[]> listIEnumerable = new List<int[]>();
      //AddRange(IEnumerable<int[]> collection); AddRange()方法的参数接收的是一个List<int[]>的集合。
      listIEnumerable.AddRange(new List<int[]>() { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 } });//
      //--------------------------------------listInt()  ;InsertRange()添加
      List<int> listInt = new List<int>() { 1, 2, 3 };
      listInt.Insert(0, 5); //从listInt这个泛型集合索引下标的0处插入一个5
      //InsertRange(int Index, IEnumerable<int> collection)
      listInt.InsertRange(1, new List<int> { 4, 5, 6 });//从listInt这个泛型集合索引下标的1处插入一个List<int>集合
      foreach (int i in listInt)
      {
          Console.WriteLine(i); //输出5,1,2,3
      }
      //--------------------------------------Remove();RemoveRange()删除
      List<int> listInt2 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
      listInt2.Remove(1); //Remove(int item)  删除listInt2集合中 “1” 这个元素。
      listInt2.RemoveAt(0);//RemoveAt(int index) 删除listInt2集合中索引下标为0的这个元素
      listInt2.RemoveRange(0, 2);//RemoveRange(int index,int count) 删除一定范围内的元素。从索引下标0处开始删除,总共删除2个元素。
      //RemoveAll(Predicate<int> math) //接收的是一个拉姆达表达式
      listInt2.RemoveAll(p => p > 2 && p <= 5); //删除listInt2集合中 大于2并且小于等于5之间的元素
      foreach (int i in listInt2) 
      {
          Console.WriteLine(i);
      }
      //--------------------------------------Clear()清空所有元素
      List<int> listInt3 = new List<int>() { 1, 2, 3, 4, 5, 6 };
      listInt3.Clear();
      //--------------------------------------Contaion()包含 
      List<int> listInt4 = new List<int>() { 1, 2, 3, 4, 5, 6 };
      bool b = listInt4.Contains(2); //Contains(int item) 检查listInt4泛型集合中是否包含了“2”这个元素。如果包含就返回true 不包含就返回false
      //--------------------------------------First();如果集合没有任何元素,会抛异常
      List<int> listInt5 = new List<int>() { 1, 2, 3, 4, 5, 6 };
      //假如listInt5这个泛型集合没有任何一项元素。那么调用First方法就会报错。提示:序列不包含任何元素
      //First()方法的返回值为int类型
      int t1 = listInt5.First();//返回listInt5这个泛型集合中第一个元素 t1的值为1。假如当listInt5这个泛型集合没有包含任何元素的时候,即:
      //List<int> listInt5 = new List<int>() { };
      //int t1 = listInt5.First(); 这里会报错:提示:序列不包含任何元素
      // First()方法的返回值为int类型。返回满足拉姆达表达式的第一个元素
      int t2 = listInt5.First(r => r > 4); //t2的值为5
      //FindAll()方法返回值为一个List<int> 泛型集合 。返回满足拉姆达表达式的所有元素
      List<int> t3 = listInt5.FindAll(r => r < 5); //t3的元素为 1,2,3,4
      //--------------------------------------Single();如果集合没有任何元素,会抛异常,如果大于一个元素也会抛异常
      List<int> listInt8 = new List<int>() { 1, 2, 3, 4, 5, 6 };
      //返回序列中满足指定条件的唯一元素;如果有多个这样的元素存在,则会引发异常
      int t8 = listInt8.Single(r => r > 3); //这里会抛异常:提示:序列包含一个以上的匹配元素。因为listInt8泛型集合里有4,5,6等元素是大于3的。
      int tt8 = listInt8.Single(r => r > 5);//tt8的值为6。 不会抛异常。因为listInt8泛型集合里只有,6等元素是大于5的。
      int tt88 = listInt8.Single(); //会抛异常:提示:序列包含一个以上的匹配元素。
      //如果 List<int> listInt8 = new List<int>() { 1}; 
      //int tt88 = listInt8.Single();泛型集合里只包含一个元素的时候,调用Single()方法就不会抛异常了。
      //--------------------------------------FirstOrDefault(); //如果集合没有任何元素,不会抛异常
      List<int> listInt5A = new List<int>() { 1, 2, 3, 4, 5, 6 };
      //假如listInt5A这个泛型集合没有任何一项元素。那么FirstOrDefault方法的默认返回值为0 而不会报错。
      int tt1 = listInt5A.FirstOrDefault(); //返回listInt5A这个泛型集合中第一个元素 tt1的值为1。假如单listInt5A这个泛型集合里没有任何元素的时候 ,即:
      //List<int> listInt5A = new List<int>(){};
      //int tt1 = listInt5A.FirstOrDefault(); //tt1的值为默认为0 ;而不会报错。(这里之所以默认值为0是因为litInt5A是一个int类型的泛型集合。而int的默认值就是0 如果listInt5A是一个string类型的泛型集合的话。那么tt1的默认值就是null。因为string类型的默认值就是null)
      //Console.WriteLine("tt1的值为{0}", tt1); //输出:tt1的值为0
      int tt2 = listInt5A.FirstOrDefault(r => r > 2); //返回满足括号中朗姆达表达式的第一个值:listInt5A这个泛型集合中只有3,4,5,6 等元素>2 ;所以既然是返回满足朗姆达表达式的第一个值。所以tt2的值为3
      int tt3 = listInt5A.FirstOrDefault(r => r == 8);
      Console.WriteLine("tt3的值为", +tt3);//输出: tt3的值为   即:tt3的值为空 因为listInt5A里没有8这个元素。所以找不到。既然找不到8这个元素,所以就什么都不会输出了。
      //========================================================
      //Find方法和FirstOrDefault方法效果相同,都是返回满足条件的第一个元素,如果没有该元素,则返回null。
      //1>Find方法是.netFramework2.0的,而FirstOrDefault是3.5的。
      //2>Find方法只能在List<T>上使用,而后者能更广泛应用在IEnemerable<T>上。
      //>Find最终是建立在Array的查找之上,而在IEnemerable上的FirstOrDefault是使用foreach查找的。因此,Find速度会比FirstOrDefault快很多,据测试可能会快一倍以上。
      //=========================================================
      //--------------------------------------Find(); //如果集合没有任何元素,不会抛异常
      List<int> listInt6 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
      //假如listInt6这个泛型集合没有任何一项元素。那么Find方法的默认值返回值为0 而不会报错。
      int t4 = listInt6.Find(r => r < 6); //返回满足括号中朗姆达表达式的第一个元素 ;listInt6泛型集合中有1,2,3,4,5等元素是<6的 ,既然是返回满足朗姆达表达式的第一个值 所以:t4的值为1
      int t5 = listInt6.Find(r => r > 6); //listInt6泛型集合中有7,8,9等元素的值是>6的。既然是返回满足朗姆达表达式的第一个值 所以:t4的值为7
      List<int> t6 = listInt6.FindAll(r => r > 2);//listInt6泛型集合中有3,4,5,6,7,8,9等元素的值是>2的。所有t6的元素为3,4,5,6,7,8,9
      //--------------------------------------Any() 只要有一个元素满足条件就返回true。否则返回false
      List<int> listInt7 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
      //Any()检查listInt6泛型集合中的元素是否满足括号中的拉姆达表达式。只要有一个元素满足条件就返回true。否则返回false
      bool b1 = listInt7.Any(r => r < 8); //b1的值为true;因为listInt7中有1,2,3,4,5,6,7等元素小于8
      bool b2 = listInt7.Any(r => r > 8); //b2的值为true;因为listInt7中 元素9是大于8的
      bool b3 = listInt7.Any(r => r > 10);//b3的值为false;因为listInt7中,没有任何一个元素大于10
      //--------------------------------------ToArray() 将List<T>泛型集合转换成数组
      List<int> listInt9 = new List<int>() { 1, 2, 3, 4, 5, 6 };
      int[] arr = listInt9.ToArray(); //将一个list<int> 泛型集合转换成一个int类型的数组;这里可以转换是因为,List<int>里存放的数据本身就是int类型的
      //--------------------------------------ToList() 将数组转换成List<T>泛型集合
      int[] arr1 = new int[] { 1, 2, 3, 4, 5, 6 };
      List<int> arrTolist = arr1.ToList(); //将一个int[]类型数组转换成List<int>泛型集合;这里可以转换是因为,List<int>里存放的数据是int类型的。而arr数组存放的数据也是int 类型的
      //--------------------------------------Reverse() 元素反转
      List<int> listInt10 = new List<int>() { 1, 2, 8, 4, 5, 6 };
      listInt10.Reverse(); //将listInt7这个泛型集合里的元素顺序反转。注意:是反转,不是降序排序
      //--------------------------------------Sort() 升序排序
      List<int> listInt11 = new List<int>() { 2, 8, 4, 1, 6, 5, 3, 7 };
      listInt11.Sort(); //将listInt8这个泛型集合里的元素按照升序排序
      Console.WriteLine("---------------");
      foreach (int i in listInt11)
      {
          Console.WriteLine(i); //输出:1,2,3,4,5,6,7,8
      }
      Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    iperf3命令使用
    python 使用多进程无法正常退出
    cfg 4 ocl
    opencv的CMakeLists.txt与makefile写法
    不需要打密码的sudo方法
    Fedora下rstudio-server安装
    Linux下突然不识别无线网卡
    Python使用opencv
    Python version 2.7 required, which was not found in the registry
    MySQL性能优化 — 实践篇1
  • 原文地址:https://www.cnblogs.com/xuxiaoshuan/p/5395039.html
Copyright © 2011-2022 走看看