C# List定义和常用方法

embedded/2024/9/22 14:44:47/

栏目总目录


List的定义

列表(List)是一种常用的集合类型,它属于System.Collections.Generic命名空间。列表是一个有序集合,可以包含重复的元素,并且可以根据索引访问元素。

List< T >

List<T> 是一个泛型集合,它提供了比数组更灵活的方式来存储和操作数据。List<T> 继承自 IList<T> 接口,并实现了许多用于添加、移除、搜索、排序等操作的方法。

通过指定类型参数 T 来定义一个 List<T>。例如存储一个字符串列表,可以这样定义:

List<string> myStringList = new List<string>();

常用方法

Add(T item)

向列表的末尾添加一个元素。

myStringList.Add("Hello");
myStringList.Add("World");

AddRange(IEnumerable collection)

向列表的末尾添加一系列元素。

List<string> moreStrings = new List<string> { "C#", "Programming" };
myStringList.AddRange(moreStrings);

Remove(T item)

从列表中移除第一个匹配的元素。

myStringList.Remove("Hello");

RemoveAt(int index)

根据索引移除列表中的元素。

myStringList.RemoveAt(0); // 假设 "World" 是第一个元素

Clear()

移除列表中的所有元素。

myStringList.Clear();

Find(Predicate match)

返回列表中第一个匹配指定条件的元素。

string found = myStringList.Find(item => item.StartsWith("C#"));
Console.WriteLine(found); // 输出 "C#"

FindAll(Predicate match)

返回一个新列表,包含所有匹配指定条件的元素。

List<string> filteredList = myStringList.FindAll(item => item.Length > 4);
foreach (var item in filteredList)
{Console.WriteLine(item);
}

Sort()

对列表中的元素进行排序。

myIntList.Add(3);
myIntList.Add(1);
myIntList.Add(2);
myIntList.Sort();
foreach (var item in myIntList)
{Console.WriteLine(item);
}
// 输出将按升序排列:1, 2, 3

Exists(Predicate match)

确定列表是否包含符合指定条件的元素。

bool containsLongWord = myStringList.Exists(item => item.Length > 5);
Console.WriteLine(containsLongWord); // 如果列表中有长度大于5的字符串,则输出 True

Contains(T item)

确定列表中是否包含特定元素。

bool containsHello = myStringList.Contains("Hello");
Console.WriteLine(containsHello); // 如果列表中包含 "Hello",则输出 True

插入元素

  • Insert(int index, T item):
    在列表的指定索引处插入一个元素。如果索引超出当前列表的范围,则会抛出异常。

    myStringList.Insert(1, "Middle"); // 在索引1的位置插入"Middle"
    
  • InsertRange(int index, IEnumerable collection):
    在列表的指定索引处插入一个集合的元素。这允许你一次性在列表的特定位置插入多个元素。

    List<string> moreItems = new List<string> { "Extra1", "Extra2" };
    myStringList.InsertRange(2, moreItems); // 在索引2的位置插入moreItems集合
    

复制与转换

  • CopyTo(T[] array, int arrayIndex):
    将整个列表的元素复制到一个已存在的一维数组中,从指定的数组索引开始复制。

    string[] array = new string[myStringList.Count];
    myStringList.CopyTo(array, 0);
    
  • ToArray():
    将列表的内容复制到一个新的数组中,并返回这个数组。

    string[] arrayFromList = myStringList.ToArray();
    

容量与计数

  • Capacity:
    这是一个属性,用于获取或设置列表内部数据结构可以存储的总元素数。当列表的元素数量超过其容量时,它会自动扩容。

    int currentCapacity = myStringList.Capacity; // 获取当前容量
    myStringList.Capacity = 100; // 设置新容量(注意:如果小于当前元素数量,可能会抛出异常)
    
  • Count:
    这是一个属性,用于获取列表中实际包含的元素数。

    int numberOfItems = myStringList.Count;
    

索引器与查找

  • Indexer (Item[int index]):
    List<T> 支持索引器,允许你通过索引直接访问或修改列表中的元素。

    string firstItem = myStringList[0]; // 访问第一个元素
    myStringList[0] = "FirstItemModified"; // 修改第一个元素
    
  • IndexOf(T item):
    搜索列表中指定的对象,并返回该对象的第一个匹配项的索引。如果没有找到对象,则返回 -1。

    int indexOfHello = myStringList.IndexOf("Hello");
    
  • LastIndexOf(T item):
    IndexOf 方法类似,但它从列表的末尾开始搜索,并返回指定对象的最后一个匹配项的索引。

    int lastIndexOfHello = myStringList.LastIndexOf("Hello");
    

提取子列表

  • GetRange(int index, int count):
    获取列表中从指定索引开始的指定数量的连续元素,并返回包含这些元素的新列表。

    List<string> subList = myStringList.GetRange(1, 2); // 从索引1开始获取2个元素
    

清理与效率

  • TrimExcess()TrimToSize()(取决于.NET版本):
    减少内部数组的容量以匹配列表中元素的数量。这有助于减少内存使用,但请注意,这并不减少 Capacity 属性的值(在TrimExcess的情况下),只是减少了内部数组的实际分配大小。在某些版本中,这个方法可能被命名为TrimToSize

    myStringList.TrimExcess(); // 或 myStringList.TrimToSize(); 取决于.NET版本
    

http://www.ppmy.cn/embedded/112273.html

相关文章

富文本中去掉 HTML 和 CSS 样式,只保留纯文本

要从富文本中去掉 HTML 和 CSS 样式&#xff0c;只保留纯文本&#xff0c;可以使用以下几种方法&#xff1a; 1. 纯 JavaScript 方法 你可以使用 JavaScript 的 innerText 或 textContent 来提取文本&#xff0c;而忽略 HTML 标签和样式。 function stripHtml(html) {var te…

自动化抢票 12306

注意!!!代码仅供学习和参考,不要用做非法用途!!! 自动化抢票 12306 1. 明确需求 明确采集的网站以及数据内容 网址: https://kyfw.12306.cn/otn/leftTicket/init数据: 车次相关信息 2. 抓包分析 通过浏览器开发者工具分析对应的数据位置 打开开发者工具 F12 或鼠标右键点…

docker容器中的内存占用高的问题分析

文章目录 问题描述原因分析分析1分析2验证猜想 结论和经验 问题描述 运维新增对某服务的监控后发现&#xff1a;内存不断上涨的现象。进一步确认&#xff0c;是因为有多个导出日志操作导致的内存上涨问题。 进一步的测试得出的结果是&#xff1a;容器刚启动是占用内存约为50M…

Pytorch2.4.0自动安装cudnn9.1??? pip安装cudnn方法

Pytorch2.4.0使用官方安装方式安装的时候&#xff0c;会自动给我安装cudnn9.1&#xff0c;不论是conda安装还是pip安装&#xff0c;害得我出了一大堆问题&#xff0c;气死我了 我倒退到安装pytorch2.3.0才没出现自动安装cudnn的问题 以及&#xff0c;记录一个pip安装cudnn的方…

基于扣子(Coze)打造第一个智能体——个性化对话机器人

文章目录 一&#xff0c;智能体体验二&#xff0c;动手打造一个自己的智能体1&#xff0c;主页点击创建机器人1.1 创建一个新的机器人1.2 修订Bot基础信息1.3 工具编排信息修订人设和回复逻辑、增补开场白等 2&#xff0c;使用插件优化机器人3&#xff0c;使用工作流优化机器人…

【STM32 HAL库】IIC通信与CubeMX配置

【STM32 HAL库】IIC通信与CubeMX配置 前言理论IIC总线时序图IIC写数据IIC读数据 轮询模式CubeMX配置应用示例AHT20初始化初始化函数读取说明读取函数 中断模式CubeMX配置状态机图fsm.caht20.c DMA模式CubeMX配置代码 前言 本文为笔者学习 IIC 通信的总结&#xff0c;基于keysk…

HTTP反向代理教学:轻松实现代理IP的妙用

在当今互联网时代&#xff0c;代理IP已经成为了很多人上网必不可少的工具。无论是为了保护隐私&#xff0c;还是为了更好地管理网络流量&#xff0c;代理IP都能发挥重要作用。今天&#xff0c;我们就来聊聊HTTP反向代理这个神奇的东西&#xff0c;教你如何轻松实现代理IP的妙用…

使用vue2+axios+chart.js画折线图 ,出现 RangeError: Maximum call stack size exceeded 错误

目录 效果图 解决方案 修正要点 效果图 修改前App.vue代码&#xff1a; <template><div id"app"><canvas id"myChart"></canvas></div> </template><script> import axios from axios; import { Chart, regis…