C#,入门教程(20)——列表(List)的基础知识

上一篇:

C#,入门教程(19)——循环语句(for,while,foreach)的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124060844

List顾名思义就是数据列表,区别于数据数组(array)。
List比数组提供强大得多!多!多!多!的功能,能存储更多!多!多!类型的数据(泛型)!
List是更多数据集合(序表SortedList、链表LinkedList、堆栈Stack、队列Quene及哈希表Hashtable等)的基础。
因而,可以说:无列表,不编程!

一、命名空间

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

如果代码提示错误信息,先添加上面的这些命名空间。

if (入门 List )
{
    本文就够了。
}
else if (想精通 List )
{
    请掌握 Linq 与 Lamda 表达式的基础知识。
}
else 
{
    关注我!无穷知识传给你!
}

二、List的声明(定义)

1、List声明

语法:

List<T> tList = new List<T>();  


注:<T>即为泛型,可以理解为任意的数据类型(数值、类、结构体、object及其他数据体)。

实例:

List<string> stringList = new List<string>();
List<Classmate>classmateList = new List<Classmate>();

2、List初值

可以在声明一个List的同时,给出初值。

List<string> stringList = new List<string>() { 
    "Tom", "Jerry", "!" 
};
List<Classmate> classmateList = new List<Classmate>() {
    new Classmate("1", "Tom"), 
    new Classmate("2", "Jerry")
};

3、数组array转为List

语法:

List<T> tList =new List<T> (数据集);


实例:

string[] stringArray = { 
    "Tom", "Jerry", "!"  
};
List<string> stringList = new List<string>(stringArray);
//或者(Linq方法):
List<string> stringList = stringArray.ToList();
//反之:
string[] stringArray = stringList.ToArray();

三、List的基础功能与常用操作

1、List的数据总数

语法:int List.Count()
实例:int count = stringList.Count();

2、清空List

语法:void List.Clear() 
实例:stringList.Clear();
必要的时候清空列表是好习惯!

3、List的遍历

语法:

// T的类型与mList声明时一样
string result = "";
foreach (T element in tList)  
{
    result += element.ToString();
}

实例(制作同学花名册):

List<Classmate> classmateList = new List<Classmate>();
//(因个人隐私需要,此处又省略。。。)
StringBuilder sb = new StringBuilder();
sb.AppendLine("<table>");
sb.AppendLine("<tr>");
sb.AppendLine("<td>序号</td>");
sb.AppendLine("<td>昵称</td>");
sb.AppendLine("<td>姓名</td>");
sb.AppendLine("<td>手机号</td>");
sb.AppendLine("<td>邮箱</td>");
sb.AppendLine("</tr>");
foreach (Classmate mo in classmateList)
{
    sb.AppendLine("<tr>");
    sb.AppendLine("<td>" + mo.Id + "</td>");
    sb.AppendLine("<td>" + mo.Nickname + "</td>");
    sb.AppendLine("<td>" + mo.Name + "</td>");
    sb.AppendLine("<td>" + mo.Mobile + "</td>");
    sb.AppendLine("<td>" + mo.Email + "</td>");
    sb.AppendLine("</tr>");
}
sb.AppendLine("</table>");

4、添加一个或一组数据

语法:List.Add(T item)
语法:List.AddRange(数据集合)   
注意:狗尾续貂,数据添加在尾部;

实例:

List<string> stringList = new List<string>();
stringList.Add("Tom");

//或:
string[] stringArray = { 
    "Tom", "Jerry", "!"  
};
List<string> firstStringList = new List<string>();
firstStringList.AddRange(stringArray);

//又或:
List<string> secondStringList = new List<string>();
//(此处可能省略几句话。。。)
stringList.AddRange(secondStringList);


5、按指定位置添加数据

语法: Insert(int index, T item); 
实例:

List<string> stringList = new List<string>();
stringList.Insert(1, "House");


6、删除元素

① 按数据删除
语法:List.Remove(T item)
② 按位置删除
语法:List.RemoveAt(int index);   
③ 批量删除
语法:List.RemoveRange(int index, int count);
④ 按条件删除
语法:List.RemoveAll(Predicate<T> match)
方法:删除满足条件的所有元素。

实例:

stringList.Remove("Tom");
stringList.RemoveAt(0);
stringList.RemoveRange(1, 2);
//(Lamda表达式)
stringList.RemoveAll(t => t.Id > 10);

7、判断List是否包含某个数据?

语法:List.Contains(T item)   
返回:true 或 false

实例:
string result = "";
if (mList.Contains("Tom"))
{
    result = "Tom is in the list";
}
else
{
    result = "Tom is not in the list";
}


四、List的高级应用


1、List排序

语法:List.Sort()
按数据的默认升序排序;
stringList.Sort();

这个实际上没有什么用处,强烈推荐下面的语法:
语法:
tList.Sort(delegate(T a, T b) {
    return Comparer<long>.Default.Compare(a.Hashcode(), b.Hashcode());
});

实例(正序):

classmateList.Sort(delegate(Classmate a, Classmate b)) {
    if(a.Id > b.Id) {
        return 1;
    }
    else {
        return -1;
    }
});
//实例(倒序):
classmateList.Sort(delegate(Classmate a, Classmate b)) {
    if(b.Id > a.Id) {
        return 1;
    }
    else {
        return -1;
    }
});
//实例(倒序,简约写法):
classmateList.Sort(delegate(Classmate a, Classmate b)) {
    return ((b.Id > a.Id) ? 1 : -1);
});
//或者,实例(倒序,简约写法):
classmateList.Sort(delegate(Classmate a, Classmate b)) {
    return Comparer<int>.Default.Compare(b.Id, a.Id);
});

列表的排序是使用频率非常高的功能,应该熟练掌握!


2、List反转

语法:List.Reverse()


3、List检索与批量检索

① List.Find方法:检索满足条件的第一个元素; 
语法:public List<T> Find(Predicate<T> match);

② List.FindAll方法:检索满足条件的所有元素; 
语法:public List<T> FindAll(Predicate<T> match);

③ List.Where方法:检索满足条件的所有元素;(类似FindAll)。
语法:public List<T> Where(Predicate<T> match);

④ List.FindLast 方法:检索满足条件的最后一个元素; 
语法:public T FindLast(Predicate<T> match);

实例(推荐使用Lamda表达式):

List<Classmate> someClassmateList = classmateList.Find(t => t.Mobile.StartsWith("139"));
List<Classmate> someClassmateList = classmateList.FindAll(t => t.Mobile.StartsWith("139"));
List<Classmate> someClassmateList = classmateList.Where(t => t.Mobile.StartsWith("139"));
List<Classmate> someClassmateList = classmateList.FindLast(t => t.Mobile.StartsWith("139"));


4、List的片段提取

语法:List.Take(int number);
方法:获得前number个数据,构成一个数据子集;

List<Classmate> top3List = classmateList.Take(3);

一般先排序,再提取!

 ——————————————————————

POWER BY 315SOFT.COM &
TRUFFER.CN

下一篇:

 C#,入门教程(21)——命名空间(namespace)与程序结构的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124140653

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/336276.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

centos7安装Redis7.2.4

文章目录 下载Redis解压Redis安装gcc依赖&#xff08;Redis是C语言编写的&#xff0c;编译需要&#xff09;编译安装src目录下二进制文件安装到/usr/local/bin修改redis.conf文件启动redis服务外部连接测试 参考&#xff1a; 在centos中安装redis-5.0.7 Memory overcommit must…

基于JavaWeb+SSM+Vue停车场微信小程序系统的设计和实现

基于JavaWebSSMVue停车场微信小程序系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关…

Linux命令手册

简介 Multics&#xff08;大而全&#xff09;项目失败&#xff0c;吸取教训启动Unix&#xff08;小而精&#xff09;&#xff0c;Linus Benedict Torvalds受Unix启发开发初始版本Linux内核&#xff0c;Git也由其开发&#xff0c;目的是为了更好的管理Linux内核开发。Unix是商业…

有线桥接|Wifi隔了一堵墙就没信号?房间的网线口利用起来,让房间死角也有网!

前言 本篇文章是路由器有线桥接主路由&#xff0c;起到AP&#xff08;热点&#xff09;的效果 上次发布的无线桥接&#xff0c;使用的前提是需要把旧路由放置在主路由的信号范围内&#xff0c;这极大限制了桥接路由器的放置位置。 如果隔了一堵墙基本上就无法连接Wifi&#x…

供应链安全项目in-toto开源框架详解

引言&#xff1a;in-toto 是一个开源框架&#xff0c;能够以密码学的方式验证构件生产路径上的每个组件和步骤。它可与主流的构建工具、部署工具进行集成。in-toto已经被CNCF技术监督委员会 (Technical Oversight Committee&#xff0c;TOC)接纳为CNCF孵化项目。 1. 背景 由于…

微信小程序之WXML 模板语法之数据绑定、事件绑定、wx:if和列表渲染

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

一键搭建你的知识库

效果 说明 由于安装包安装需要glibc>2.7 我就不尝试了 因为glib升级是一个繁琐的过程 没有升级的意义 只是为了体验知识库 没必要浪费时间 1.1docker compose部署trilium 1.1.创建目录 mkdir -p /opt/triliumcd /opt/trilium 1.2.编写docker-comppose.yml文件 vim dock…

使用STM32的GPIO口实现LED闪烁

✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 &#x1f34e;获取更多嵌入式资料可点击链接进群领取&#xff0c;谢谢支持&#xff01;&#x1f447…

JavaWeb-Cookie与Session

一、概念 是否还记得我们在HTTP概念中提到&#xff1a;HTTP的一大特点是无状态&#xff0c;这意味着多次HTTP请求之间是无法共享数据的。而在请求之间共享一些数据又是我们期望达到的效果。&#xff08;例如登录的记住我功能&#xff09;于是便有了会话跟踪技术&#xff0c;而…

Qt拖拽组件与键盘事件

1.相关说明 1.设置widget或view的拖拽和放置模式函数setDragDropMode参数说明&#xff0c;NoDragDrop(无拖拽和放置)、DragOnly(只允许拖拽)、DropOnly(只允许放置)、DragDrop(允许拖拽和放置)、InternalMove(只移动不复制) 2.设置widget或view的放置动作函数setDefaultDropAct…

python 实现大语言模型中的概率论:两人轮流出手对决时取胜概率的推导

假设你跟朋友通过打赌投篮来打赌一万块。你们找到一个篮球框&#xff0c;然后约定轮流投篮&#xff0c;谁先投进谁赢。假设你投进的概率是 p&#xff0c;也就是投不进的概率是 1-p&#xff0c;你对手投进的概率是 q,投不进的概率是 1-q&#xff0c;如果由你先投&#xff0c;那么…

反序列化提升刷题(2)

今天的例题&#xff1a; <?phphighlight_file(__FILE__);class ctfshowvip{public $username;public $password;public $code;public function __construct($u,$p){$this->username$u;$this->password$p;}public function __wakeup(){if($this->username! || $thi…

解决 vue 项目开发越久 node_modules包越大的问题

解决 vue 项目开发越久 node_modules包越大的问题 node_modules.cache 文件&#xff08;编译缓存文件 可以删除 &#xff09; compression-webpack-plugin 禁止缓存 const CompressionPlugin require("compression-webpack-plugin");module.exports {plugins: [ne…

面向对象之深度优先和广度优先

面向对象深度优先和广度优先是什么&#xff1f; 二叉树的两种遍历是数据结构的经典考察题目, 广度遍历考察队列结构, 深度遍历考察递归 深度优先 先序遍历(父, 左子, 右子) 0, 1, 3, 7, 8, 4, 9, 2, 5, 6 中序遍历(左子, 父, 右子) 7, 3, 8, 1, 9, 4, 0, 5, 2, 6 后序遍历(左子…

SpringBoot跨域问题解决

前端访问后台接口时&#xff0c;浏览器报错&#xff0c;跨域无法访问。 报错信息如下&#xff1a; Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the requested resource. 经过一番百度之后&#…

【JVM】运行时数据区

文章目录 运行时数据区程序计数器栈栈帧 堆方法区本地方法栈直接内存变量存储位置 面试题本地方法栈有什么用&#xff1f;没有程序计数器会怎么样&#xff1f;说一说Java的内存分布情况类存放在哪里&#xff1f;局部变量存放在哪里&#xff1f; 运行时数据区 java虚拟机在运行…

acwing讲解篇之93. 递归实现组合型枚举

文章目录 题目描述题解思路题解代码 题目描述 题解思路 本题相当于二叉树的深度优先遍历&#xff0c;树的第i层表示第i个数选或不选&#xff0c;当选择了m次左节点后退出 我们记录当前递归的深度deep 然后用state进行状态压缩&#xff0c;state第i位是1表示选第i个数&#xff…

FaFu--练习复盘--2

3、函数练习 3.1、函数表达式&#xff08;1&#xff09; 描述 根据以下公式计算数学表达式的值&#xff0c;并将结果作为函数值返回。在main()函数中输入x&#xff0c;调用函数fun(x)&#xff0c;并输出fun(x)的值。 输入 输入1行&#xff0c;包含1个double类型的浮点数&…

git22端口超时

笔记本换了个主板后&#xff0c;将内容用git上传到GitHub时发现22端口超时。 以为是网络啥的原因&#xff0c;但是用ssh -T gitgithub.com进行多次测试&#xff0c;发现不是网络问题。按照网上操作&#xff0c;在.ssh文件夹内将config文件进行修改&#xff0c;改成&#xff1a;…

python爬取图片(thumbURL和html文件标签分别爬取)

当查看源代码&#xff0c;发现网址在thumbURL之后时&#xff0c;用此代码: # 当查看源代码&#xff0c;发现网址在thumbURL之后时&#xff0c;用此代码:import requestsheaders {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121…