您当前的位置: 首页 >  c#

Peter_Gao_

暂无认证

  • 3浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C# List 的一般用法

Peter_Gao_ 发布时间:2020-07-21 17:54:27 ,浏览量:3

List泛型集合是C#编程中的经常使用的集合之一,相对数组它可以动态的添加元素而不是声明的时候就必须指定大小。相对于ArrayList集合和Hashtable集合的优势是其元素的数据类型可以确定。而不是默认的父类类型object。

所属命名空间: System.Collections.Generic public class List:IList,Icollection,IEnumerable,IList,Icollection,Ienumerable List是ArrayList类的泛型等效类,该类使用大小可按需动态增加的数组实现IList泛型接口

List泛型集合的声明

1.List泛型集合的声明: //声明一个List泛型集合的变量listNew List listNew =new List();

List 变量名=new List();

 List list1 = new List { 1, 2, 3, 4, 5, };

//T为列表中元素类型
List List = new List();

//当T为string时,举例:
string[] nameArr = { "Ha", "Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", "Locu" };

List list = new List(nameArr);

元素添加

//添加一个元素
list. Add("lucy");
//添加一组元素
string[] temArr = { "Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku",  "Locu" };
list.AddRange(temArr);
//插入元素
list.Insert(1, "Hei");

注意: 1,以上代码声明的是一个string类型的泛型集合,其元素必须都为string型。 2,可以声明其他元素的泛型集合,只需要将string改成对应类型便可。 3.List泛型集合添加元素的Add()方法: 代码案例:为第二步声明的集合添加五个元素: listNew.Add("一号元素"); listNew.Add("二号元素"); listNew.Add("三号元素"); listNew.Add("四号元素"); listNew.Add("五号元素"); 说明: 1,List泛型集合只能使用Add()方法添加元素,不能直接指定下标赋值如:“listnew[0]="一号元素";”这样的语句是不合法的。因为List泛型集合在声明之后没有添加元素之前是空的,直接指定下标赋值会导致索引超出范围。 2,一旦元素添加成功,指定下标修改集合中的元素,如在这个声明例子中我们可以将"二号元素"改成任何字符串,如“你好”。listNew[1] = "你好"; 3,List泛型集合和数组一样,其下标是从0开始的。 因为元素是字符串,我们也可以添加一个字符串数组在集合中,使用AddRange()方法便可: 案例)为listNew集合添加一个字符串数组 代码: //声明一个字符串数组,有三个字符串元素 string[] str=new string[]{"六号元素","七号元素","八号元素"}; //使用AddRange()方法将元素添加到集合中 listNew.AddRange(str); //添加成功 添加完成之后该集合便有了8个元素。

复制部分元素

GetRange

遍历元素(foreach)
foreach (string name in list)
{
    Console.WriteLine(name);
}

删除、清空元素

//删除一个值
list.Remove("Hunter");
//删除下标为index的元素
list.RemoveAt(0);
//从下标3开始,删除2个元素
list.RemoveRange(3, 2);
//清空元素
list.Clear();

执行List的Clear方法和RemoveAll方法,List将清除指定元素,同时修改Count属性值,而Capacity属性值保持不变。

Clear方法和RemoveAll方法的区别是:Clear方法会清空所有元素,RemoveAll方法会清空满足指定条件的元素,当将条件设置为恒成立时,也会删除所有元素。

Contains(是否包含某个元素)
bool blog = list.Contains("Hunter");

List排序  

C# List排序_Peter_Gao_的博客-CSDN博客

Count属性

返回List泛型集合中元素的数量。 如我们对上面已经添加过元素的集合获得其Count属性值 Console.WriteLine(listNew.Count); //输出ListNew集合的元素数量 输出值为:5

Capacity属性

返回在不增加大小的情况下目前List泛型集合的容量 List泛型集合在添加元素的时候容量是变化的,其过程(原理)如下: 当添加元素的时候集合的容量不足以容纳所有元素就会自动增加目前元素数一倍的容量。 所以在上面的例子中listNew集合的容量的增加过程如下: 添加第一个元素的时候Capacity的值为1; 添加第二个元素的时候Capacity的值为2; 添加第三个元素的时候Capacity的值为4; 添加第四个元素的时候Capacity的值为4; 添加第五个元素的时候Capacity的值为8;

List泛型集合的常用方法: Clear()方法

无返回值,清空集合中的所有元素 案例:清空ListNew集合中的所有元素 listNew.Clear();

Contains()方法

返回布尔型数据,参数为集合中元素的数据类型 功能:检查集合中是否存在某元素 案例:检查listNew集合中是否存在字符串元素"一号元素"。 代码:listNew.Contains("一号元素"); 返回值为:true。

Equals()方法

比较两个List泛型集合是否相等 举例,比较listNew集合与listold集合是否相等: 代码:listNew.Equals(listold); //本人就不声明listold集合了,理解Equals()方法即可。因为不常用。

CompareTo ()方法

这是字符串bai比较的函数,用法: string s1 = "c"; string s2 = "b"; if(s1.CompareTo(s2)==1) { } 它有三个返回du值~: 当zhis1>s2时,s1.CompareTo(s2)==1 当s1=s2时,s1.CompareTo(s2)==0 当s1        {           if(name.length>3)              return true;           return false;        });    

第二种方法 委托给一个函数     eg:     

        public bool ListFind(string name)
        {
            if (name.Length > 3)
            {
                return true;
            }
            return false;
        }

      这两种方法的结果是一样的

(13) List.FindLast方法  public T FindLast(Predicate match);确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配。

用法与List.Find相同。

(14) List.TrueForAll方法:  确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配。

 public bool TrueForAll(Predicate match);

(15) List.Take(n):  获得前n行 返回值为IEnumetable,

T的类型与List的类型一样

E.g.:

IEnumerable takeList=  mList.Take(5);

          foreach (string s in takeList)

          {

              Console.WriteLine("element in takeList: " + s);

          }

       这时takeList存放的元素就是mList中的前5个

List.Where方法:检索与指定谓词所定义的条件相匹配的所有元素。

跟List.FindAll方法类似。

E.g.:          

  IEnumerable whereList = mList.Where(name =>
                {
                    if (name.Length > 3)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                });

         foreach (string s in subList)
         {
             Console.WriteLine("element in subList: "+s);
         }

         这时subList存储的就是所有长度大于3的元素

List.RemoveAll方法:移除与指定的谓词所定义的条件相匹配的所有元素。

public int RemoveAll(Predicate match);

E.g.:           

 mList.RemoveAll(name =>
                {
                    if (name.Length > 3)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                });
            foreach (string s in mList)
            {
                Console.WriteLine("element in mList: " + s);
            }

      这时mList存储的就是移除长度大于3之后的元素。

在C#的List集合中有时候需要获取指定索引位置范围的元素对象来组成一个新的List集合,此时就可使用到List集合的扩展方法GetRange方法,GetRange方法专门用于获取List集合指定范围内的所有值,GetRange方法签名为List GetRange(int index, int count),index为开始索引位置,count为从index开始获取元素的个数。

例如有个List的集合list1,内部存储10个数字,需要获取list1集合从第5个数开始,连续的5个元素组成新的集合,可使用下列语句:

List list1 = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var resultList= list1.GetRange(4, 5);
计算结果为,resultList集合的元素为5,6,7,8,9

  string str = str.Substring(0, i);//截取字符串前i位
  string str = str.Remove(i, str.Length - i);//移除字符串i位后面的字符=截取字符串前i位
  string str = str.Remove(0, i);//截取字符串i位之后的字符串
  string str = str.Substring(i);//截取字符串i位之后的字符串
  string str = str.Substring(str.Length - i);//截取字符串后i位
  string str = str.Remove(0, str.Length - i);//截取字符串后i位
  string str = str.Substring(0, str.Length - i);//去掉字符串后i位
  string str = str.Remove(str.Length - i, i);//去掉字符串后i位
  string str = str.Replace("abc", "ABC");//替换字符串中的字符串
  string str = str.ToUpper();//小写字母转换成大写字母
  string str = str0.ToLower();//大写字母转换成小写字母
  string str= str.Substring(str.Length - 1, 1);//截取字符串最后一位
  int n = str.IndexOf("123");
  string str = str.Substring(1, 4);//截取从开始字符串到结束字符串范围
  
  string s = "1,2,3,4,5,6,7,8,9,10";
  string[] strArray = s.Split(','); //字符串转数组
  string str = string.Join(",", strArray);//数组转字符串
  List list = new List(s.Split(','));//字符串转List
  string str = string.Join(",", list.ToArray());//List转字符串
  string[] str = list.ToArray();//List转数组
  List list_ = new List(str15);//数组转List
获取序列中满足条件的第一个元素 FirstOrDefault 

1. Find方法只能在List上使用,而后者能更广泛应用在IEnemerable上。

Find最终是建立在Array的查找之上,而在IEnemerable上的FirstOrDefault是使用foreach查找的。因此,Find速度会比FirstOrDefault快很多,据测试可能会快一倍以上。

2. First:取序列中满足条件的第一个元素,如果没有元素满足条件,则抛出异常  3. FirstOrDefault:获取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0)  First、FirstOrDefault的区别在于:当没有元素满足条件时,一个抛出异常,一个返回默认值。  因此,在使用时,一定要注意这个区别:  1、当确信序列中一定有满足条件的元素时,使用First方法,取到元素后,无需判断是否为null  2、当序列中可能找不到满足条件的元素时,使用FirstOrDefault方法,然后,一定要对返回值是否为null,进行不同的处理

获取List集合中的最后一个元素对象  Last

则一般会先通过获取到list集合的个数Count属性,然后再使用索引的方式获取到该集合的最后一个位置的元素信息。其实在List集合中提供了获取最后一个元素的Last方法,调用此方法可直接获取list集合中最后一个元素。

例如有个List集合的对象list1,需要获取到该集合对象的最后一个元素可使用Last方法,具体如下:

  List list1 = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

 var lastInt=list1.Last();

 关于数组Array

 C#基础-数组 Array_Peter_Gao_的博客-CSDN博客

C#List排序多权重、自定义_漓涂-CSDN博客_c# 多重排序

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.3879s