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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis复制和分区:主从复制、哨兵模式和集群模式

概述 在 Redis 中&#xff0c;复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述&#xff1a; 主从复制 (Replication) 基本概念&#xff1a;Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操…

WGAN损失函数解读

WGAN是Wasserstein GAN 解读

【大数据Hive】hive 行列转换使用详解

目录 一、前言 二、使用场景介绍 2.1 使用场景1 2.2 使用场景2 三、多行转多列 3.1 case when 函数 语法一 语法二 操作演示 3.2 多行转多列操作演示 四、多行转单列 4.1 concat函数 语法 4.2 concat_ws函数 语法 4.3 collect_list函数 语法 4.4 collect_set函…

《设计模式的艺术》笔记 - 命令模式

介绍 命令模式将一个请求封装为一个对象&#xff0c;从而可用不同的请求对客户进行参数化&#xff1b;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。命令模式是一种对象行为模式&#xff0c;其别名为动作模式或事务模式。 实现 myclass.h // // Created by …

数据预处理 matlab 数据质量评估

知乎 数据类型转换等 Mathworks 数据预处理 概念辨析 配对是同一批样本的前后比较&#xff0c;独立是两批不同样本的的比较 独立样本是指我们得到的样本是相互独立的。配对样本就是一个样本中的数据与另一个样本中的数据相对应的两个样本。配对样本可以消除由于样本指定的不公…

dpwwn:02

靶场下载地址 https://download.vulnhub.com/dpwwn/dpwwn-02.zip 环境配置 当打开此虚拟机环境的时候&#xff0c;可能会出现&#xff1a;当前硬件版本不支持设备“sata”。然后启动失败的情况~ 解决办法参考&#xff1a;https://www.cnblogs.com/yaodun55/p/16434468.html …

x-cmd pkg | fanyi - 命令行中英文翻译工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 fanyi 是命令行翻译工具&#xff0c;翻译数据来源于 icba.com 和 fanyi.youdao.com&#xff0c;仅支持中英文互译。支持 ChatGPT&#xff0c;可通过设置 OpenAI API 密钥以启用 ChatGPT 翻译。 注意&#xff1a;在 L…

QT上位机开发(动态数据采集与监控)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 上位机开发中,有一种类型的应用软件很特殊,它几乎没有什么交互操作,主要的工作就是检测和显示。如果说在此基础上有什么扩展的话,可能就是安全监控和报警。所以,这个上位机软件…

Flink SQL

Flink SQL 来源&#xff1a;B站尚硅谷 sql-client准备 Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理…

银河麒麟V10安装mysql5.7

本文介绍如何在银河麒麟高级服务器操作系统下安装 Mysql 数据库 1.适配系统版本 适用系统&#xff1a;V10(SP1) 适用架构&#xff1a;X86、AARCH64、LOONGARCH64 其他版本和架构可作参考 2.安装说明 X86 和 AARCH 架构的源中自带 Mysql 安装包&#xff0c;所以可以下载对…

本地运行LlaMA 2的简易指南

大家好&#xff0c;像LLaMA 2这样的新开源模型已经变得相当先进&#xff0c;并且可以免费使用。可以在商业上使用它们&#xff0c;也可以根据自己的数据进行微调&#xff0c;以开发专业版本。凭借其易用性&#xff0c;现在可以在自己的设备上本地运行它们。 本文将介绍如何下载…

@RequestBody注解基础

RequestBody RequestBody注解一般与post方法使用。 一个请求中只能存在一个RequestBody注解。 RequestBody 用于接收前端传递给后端的json字符串中的数据。&#xff08;处理json格式的数据&#xff09; 语法格式&#xff1a; ​(RequestBody Map map) (RequestBody Object obje…

numpy数组的max、min、argmax和argmin计算方法

numpy数组的max、min、argmax和argmin计算方法 官方对numpy.max和numpy.min的说明 numpy.max 参考官方的理解 数组&#xff1a; 24611529 import numpy as npif __name__ __main__:a np.array([[2, 4, 6, 1], [1, 5, 2, 9]])print(a)print(np.argmax(a, axis0)) # ax…

Java医院信息管理系统

技术框架&#xff1a; springboot shiro layui jquery thymeleaf nginx 有需要的可以联系我。 运行环境&#xff1a; jdk8 mysql IntelliJ IDEA maven项目功能&#xff1a; 本项目是用springbootlayuishiro写的医院管理系统&#xff0c;系统的业务比较复杂&#x…

11 - PXC集群|MySQL存储引擎

PXC集群&#xff5c;MySQL存储引擎 数据库系列文章PXC集群配置集群测试集群 MySQL存储引擎存储引擎介绍mysql服务体系结构mysql服务的工作过程处理查询访问的工作过程处理存储insert访问的工作过程 什么是搜索引擎 存储引擎管理查看存储引擎修改存储引擎 存储引擎特点myisam存储…

canvas能压缩图片?

之前写过一篇使用命令行工具压缩图片的博文&#xff1a;使用yx-tiny命令行工具进行图片压缩&#xff0c;大家感兴趣可以去瞅一眼。 这篇简单说一下使用canvas压缩图片 其实思路很简单&#xff0c;我们选择了图片之后&#xff0c;会获取到对应的文件流对象&#xff0c;然后我们…

jvm复习,深入理解java虚拟机一:运行时数据区域

程序计数器&#xff08;Program Counter Register&#xff09; 它是程序控制流的指示器&#xff0c;简单来说&#xff0c;为了线程切换后能恢复到正确的执行位置&#xff0c;每条线程都需要有一个独立的程序计数器 Java虚拟机栈&#xff08;Java Virtual Machine Stack&#xf…

【LeetCode每日一题】2809. 使数组和小于等于 x 的最少时间

2024-1-19 文章目录 [2809. 使数组和小于等于 x 的最少时间](https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/)思路&#xff1a; 2809. 使数组和小于等于 x 的最少时间 思路&#xff1a; 获取两个列表的长度n&#xff0c;并初始化一个二维数组f&…

一种更快的Kmeans原理与实现

普通的k-means实现大多需要多轮迭代,一轮需要O(n * k)的复杂度,其中n是数据量,k是聚类的数量。观察到大部分地方的标准均值中的大多数距离计算都是冗余的。 所以Elkan-Kmeans通过三角不等式来优化这一过程,减少无效计算。 困难在于三角不等式给出了上界,但我们需要下界以…

《微信小程序开发从入门到实战》学习八十六

6.15 设备API 6.15.5 屏幕亮度API 使用wx.setScreenBrightness可设置屏幕亮度。示例代码如下&#xff1a; wx.setScreenBrightness({ value: 0.5, // 屏幕亮度值&#xff0c;范围0~1,1表示最亮 success() {} }) 使用wx.getScreenBrightness可获取屏幕亮度&#xff0c;示例代…