百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

List(列表)(4-14)-C#编程零基础到入门学习

toyiye 2024-07-15 01:22 7 浏览 0 评论

在C#中,List是一种泛型可变大小数组,它可以动态地增加或减少容量。List <T>是强类型对象的集合,可以通过索引对其进行访问,并具有用于排序,搜索和修改列表的方法。

List在System.Collections.Generic命名空间中,ArrayList的泛型版本,使用前需要引用此命名空间。



本节又会引出很多概念,比如泛型、集合、动态数组等,从能看明白的地方开始,有不明白的地方直接跳过,后面学的多了再往前翻,回顾回顾就都会了,学习编程不能急。


List的特点

List 是一个泛型类,因此它具有以下特点:

  • 在System.Collection.Generic命名空间下。
  • 类型安全:可以包含指定类型的元素,在编译时就能检查类型是否正确,并且不执行装箱/拆箱,因为它是泛型的。
  • 动态大小:和数组不同,List 的大小是动态的,可以根据需要增加或减少,等效于ArrayList
  • 方便的访问:可以通过索引直接访问元素。可以通过传递索引来访问元素,例如myList[0]。索引从零开始
  • 方便的操作:提供了丰富的添加、删除、查找和遍历元素的方法,比如使用Add(),AddRange()方法等
  • 与ArrayList相比,执行速度更快,出错更少。

List的语法格式

List<T> list = new List<T>();
//T 是一个类型参数,可以是任何类型,比如 int、string、自定义的类等等。

List的使用方法

List 有很多内置方法,例如:

  • Add(T item): 在列表的末尾添加一个元素。
  • Insert(int index, T item): 在指定索引处插入一个元素。
  • RemoveAt(int index): 移除指定索引处的元素。
  • Clear(): 移除列表中的所有元素。
  • Contains(T item): 判断列表中是否包含某个元素。
  • IndexOf(T item): 返回元素在列表中的索引,如果列表不包含该元素,则返回 -1。

创建LIST:创建列表和添加元素

完整示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CreatListType
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //创建列表和添加元素
            List<int> list1 = new List<int>();//仔细看数据类型(int)
            List<string> list2 = new List<string>();//string
            list1.Add(1);
            list1.Add(2);
            list1.Add(3);
            list1.Add(4);
            list1.Add(5);
            list2.Add("a");
            list2.Add("b");
            list2.Add("c");
            list2.Add("d");
            list2.Add("e");
            //Console.WriteLine(list1);//运行后观察下类型System.Collections.Generic.List`1[System.Int32]          
            //Console.WriteLine(list2);// System.Collections.Generic.List`1[System.String]
            Console.WriteLine(list1[0]);//1
            Console.WriteLine(list1[1]);//2
            Console.WriteLine(list2[1]);//a
        }
    }
}
//可以尝试输出不存在的索引号(list1[8]),看看结果。



插入(Insert)元素(在指定位置插入元素)

完整示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InsertListType
{
    internal class Program
    {
        static void Main(string[] args)
        {
           
            {
                //创建列表和添加元素
                List<int> list1 = new List<int>();//仔细看数据类型(int)
                List<string> list2 = new List<string>();//string
                list1.Add(1);//索引0
                list1.Add(2);//索引1
                list1.Add(3);//索引2	
                list1.Add(4);//索引3
                list1.Add(5);//索引4      
                Console.WriteLine("当前元素数量为:{0}",list1.Count);//5
                Console.WriteLine("未插入数字时索引0是:{0} ",list1[0]);//1
                Console.WriteLine("未插入数字时索引1是:{0} ", list1[1]);//2
                Console.WriteLine("未插入数字时索引2是:{0} ", list1[2]);//3
                Console.WriteLine("未插入数字后索引4是:{0} ", list1[4]);//5

                //插入后list会变长
                list1.Insert(0, 2);//在索引号0处插入2
                Console.WriteLine("插入后元素数量是:{0} ",list1.Count);//6
                Console.WriteLine("插入数字后索引0是:{0} ", list1[0]);//2
                Console.WriteLine("插入数字后索引1是:{0} ", list1[1]);//1
                Console.WriteLine("插入数字后索引2是:{0} ", list1[2]);//2
                Console.WriteLine("插入数字后索引4是:{0} ", list1[4]);//4
                Console.WriteLine("插入数字后索引5是:{0} ", list1[5]);//5
            }
        }
    }

}
//可以尝试插入不存在的索引号,看看结果。

移除(Remove)元素(移除指定位置元素)

完整示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RemoveList
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //创建列表和添加元素
            List<int> list1 = new List<int>();//仔细看数据类型(int)
            list1.Add(1);//索引0
            list1.Add(2);//索引1
            list1.Add(3);//索引2
            list1.Add(4);//索引3
            list1.Add(5);//索引4      
            Console.WriteLine("当前元素数量为:{0}", list1.Count);//5
            Console.WriteLine("未移除数字时索引0是:{0} ", list1[0]);//1
            Console.WriteLine("未移除数字时索引1是:{0} ", list1[1]);//2
            Console.WriteLine("未移除数字时索引2是:{0} ", list1[2]);//3
            Console.WriteLine("未移除数字后索引4是:{0} ", list1[4]);//5

            //插入后list会变长
            list1.Remove(0);//移除索引号0处的元素
            Console.WriteLine("移除后元素数量是:{0} ", list1.Count);//5
            Console.WriteLine("移除数字后索引0是:{0} ", list1[0]);//2
            Console.WriteLine("移除数字后索引1是:{0} ", list1[1]);//1
            Console.WriteLine("移除数字后索引2是:{0} ", list1[2]);//2
            Console.WriteLine("移除数字后索引4是:{0} ", list1[4]);//4
            //超出当前list的范围了,会报错
            //Console.WriteLine("移除数字后索引5是:{0} ", list1[5]);//报错
        }
    }
}

因开始是在5个元素(1,2,3,4,5)在索引0处插入2变为6个元素(2,1,2,3,4,5)现在移除了索引0的元素(2),变为和最开始的列表相同了(先插入了2,后又移除了2)再输出第6个元素的时候就会出错了。


移除列表内所有元素(清空列表)Clear

完整示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClearList
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //创建列表和添加元素
            List<int> list1 = new List<int>();//仔细看数据类型(int)
            list1.Add(1);//索引0
            list1.Add(2);//索引1
            list1.Add(3);//索引2
            list1.Add(4);//索引3
            list1.Add(5);//索引4      
            Console.WriteLine("当前元素数量为:{0}", list1.Count);//5
            Console.WriteLine("未清空列表时索引0是:{0} ", list1[0]);//1
            Console.WriteLine("未清空列表时索引1是:{0} ", list1[1]);//2
            Console.WriteLine("未清空列表时索引2是:{0} ", list1[2]);//3
            Console.WriteLine("未清空列表时索引4是:{0} ", list1[4]);//5
            list1.Clear();
            Console.WriteLine("当前元素数量为:{0}", list1.Count);//0
        }
    }
}



检查(inspect)列表中的元素

判断列表中是否包含某个元素。

完整示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InspectList
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //创建列表和添加元素
            List<int> list1 = new List<int>();//仔细看数据类型(int)
            list1.Add(1);//索引0
            list1.Add(2);//索引1
            list1.Add(3);//索引2
            list1.Add(4);//索引3
            list1.Add(5);//索引4
            bool result = list1.Contains(1);//TRUE
            if (result) //判断
            {
                Console.WriteLine("列表中存在");
            }
            else
            {
                Console.WriteLine("列表中不存在");
            }    
        }
    }
}
//把list1.Contains(1)换成list1.Contains(9);试试看看效果。




再完善下刚才的代码,如果列表中存在该元素,想知道该元素的索引怎么办?

完整代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace InspectList
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //创建列表和添加元素
            List<int> list1 = new List<int>();//仔细看数据类型(int)
            list1.Add(1);//索引0
            list1.Add(2);//索引1
            list1.Add(3);//索引2
            list1.Add(4);//索引3
            list1.Add(5);//索引4
            int element = 1;//元素
            bool result = list1.Contains(element);//TRUE
            int indexOfNum=list1.IndexOf(element);//获取索引号
            if (result) 
            {
                Console.WriteLine("列表中存在,索引为:{0}",indexOfNum);
            }
            else
            {
                Console.WriteLine("列表中不存在");
            }
            
           
        }
    }
}


本节开篇概念相关汇总:

List和泛型的关系

List 是一个泛型类,它的类型参数可以是任何类型。可以创建一个 List<int>、List<string>、List<CustomClass> 等等。泛型让 List 可以更加灵活和类型安全地处理不同类型的数据。

泛型:泛型是 C# 的一种特性,它允许你编写一个可以处理任何类型的代码。泛型的类型参数(即上述代码中的 T)可以是任何类型,包括类、结构体、接口、委托等。泛型可以提高代码的重用性和类型安全性。

List与数组的关系

List 和数组都可以用来存储一组数据,但它们的实现和使用方式有所不同。数组的大小是固定的,而 List 的大小是动态的。这意味着你可以在运行时向 List 添加或删除元素,而不需要像数组那样手动调整大小。此外,List 提供了更多方便的操作方法,如添加、删除和查找元素。然而,相对于数组,List 的性能可能会稍微慢一些。在实际开发中,应根据具体需求和场景选择使用数组还是 List。

List和集合的关系

在C#中,集合(Collection)是一个泛指,它包含了许多类型的集合类,如List、Dictionary、Set等。List 是集合的一种实现方式,具有动态数组的特性,可以方便地添加、删除和查找元素。其他集合类型如 Dictionary 具有键值对的特性,Set 具有去重的特性等。在实际开发中,应根据具体需求和场景选择使用哪种集合类型。

这里仅做简述。

相关推荐

Asterisk-ARI对通道中的DTMF事件处理

Asterisk通道中关于DTMF处理是一个非常重要的功能。通过DTMF可以实现很多的业务处理。现在我们介绍一下关于ARI对通道中的DTMF处理,我们通过自动话务员实例来说明Asterisk如何创建一...

PyQt5 初次使用(pyqt5下载官网)

本篇文章默认已安装Python3,本篇文章默认使用虚拟环境。安装pipinstallPyQt5PyQt一些图形界面开发工具QtDesigner、国际化翻译工具Liguist需要另外...

Qt开发,使用Qt for Python还是Qt C++ Qt开发,使用Qt for

Qt开发使用QtforPython还是QtC++?1.早些年写过一个PyQt5的项目,最近几年重构成QtC++了,其中有个人原因,如早期代码写得烂,...

最简单方法!!用python生成动态条形图

最近非常流行动态条形图,在B站等视频网站上,此类视频经常会有上百万的播放量,今天我们通过第三方库:bar_chart_race(0.2版本)来实现动态条形图的生成;生成的效果如图:问题:...

Asterisk通道和ARI接口的通信(aau通道数)

Asterisk通道和ARI详解什么是通道Asterisk中,通道是介于终端和Asterisk自己本身的一个通信媒介。它包含了所有相关信息传递到终端,或者从终端传递到Asterisk服务器端。这些信...

Python GUI-长链转短链(长链接转化成短链接java)

当我们要分享某一个链接给别人,或是要把某个链接放入帖子中时,如果链接太长,则会占用大量空间,而且很不美观。这时候,我们可以结束长链转短链工具进行转换。当然可以直接搜索在线的网站进行转换,但我们可以借此...

Python 的hash 函数(python的hash函数)

今天在看python的hash函数源码的时候,发现针对不同的数据类型python实现了不同的hash函数,今天简单介绍源码中提到的hash函数。(https://github.com/pyth...

8款Python GUI开源框架,谁才是你的菜?

作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文千锋武汉Python培训小编将推荐一些PythonGUI框架,希望对你有所帮助。1、Python的UI开发工具包Kivy...

python适合开发桌面软件吗?(python可不可以开发桌面应用软件)

其实Python/Java/PHP都不适合用来做桌面开发,Java还是有几个比较成熟的产品的,比如大名鼎鼎的Java集成开发环境IntelliJIDEA、Eclipse就是用Java开发的,不过PH...

CryptoChat:一款功能强大的纯Python消息加密安全传输工具

关于CryptoChatCryptoChat是一款功能强大的纯Python消息加密安全传输工具,该工具专为安全研究专家、渗透测试人员和红蓝队专家设计,该工具可以完全保证数据传输中的隐私安全。该工具建立...

为什么都说Python简单,但我觉得难?

Python普遍被大家认为是编程语言中比较简单的一种,但有一位电子信息的学生说自己已经学了C语言,但仍然觉得Python挺难的,感觉有很多疑问,像迭代器、装饰器什么的……所以他提出疑问:Python真...

蓝牙电话-关联FreeSwitch中继SIP账号通过Rest接口

蓝牙电话-关联FreeSwitch中继SIP账号通过Rest接口前言上一篇章《蓝牙电话-与FreeSwitch服务器和UA坐席的通话.docx》中,我们使用开源的B2B-UA当中经典的FreeSWIT...

技术分享|Sip与WebRTC互通-SRProxy开源库讲解

SRProxy介绍目前WebRTC协议跟SIP协议互通场景主要运用在企业呼叫中心、企业内部通信、电话会议(PSTN)、智能门禁等场景,要想让WebRTC与SIP互通,要解决两个层面的...

全网第N篇SIP协议之GB28181注册 JAVA版本

鉴于网上大部分关于SIP注册服务器编写都是C/C++/python,故开此贴,JAVA实现也贴出分享GB28181定义了了基于SIP架构的视频监控互联规范,而对于多数私有协议实现的监控系统...

「linux专栏」top命令用法详解,再也不怕看不懂top了

在linux系统中,我们经常使用到的一个命令就是top,它主要是用来显示系统运行中所有的进程和进程对应资源的使用等信息,所有的用户都可以使用top命令。top命令内容量丰富,可令使用者头疼的是无法全部...

取消回复欢迎 发表评论:

请填写验证码