C#核心知识回顾——10.List、Dictionary、数据结构、LinkedList

news2024/10/7 18:28:33

1.List

 List<int> list = new List<int>();  
        List<String> strings = new List<String>();

        //增
        list.Add(0);
        list.Add(1);

        List<int> ints = new List<int>();
        ints.Add(0);
        list.AddRange(ints);
        //插入
        list.Insert(0, 1);// 位置0插入1

        //删
        //1.移除指定元素
        list.Remove(0);
        //2.移除指定位置元素
        list.RemoveAt(0);
        //3.清空
        list.Clear();

        list.Add(1);
        list.Add(2);
        list.Add(3);
        list.Add(4);
        //查
        //1.得到指定位置的元素
        Debug.Log(list[1]);
        //2.查看元素是否存在
        if (list.Contains(0))
        {
            Debug.Log("存在0");
        }
        //3.正向查找元素位置
        //找到返回位置找不到返回-1
        int index = list.IndexOf(0);
        Debug.Log(index);
        //4.反向查找元素位置
        // 找到返回位置找不到返回 - 1
        int indexlast = list.LastIndexOf(0);
        Debug.Log(indexlast);

        //改
        list[0] = 99;

        //遍历
        for (int i = 0; i < list.Count; i++)
        {
            Debug.Log(list[i]);
        }
        foreach (int item in ints)
        {
            Debug.Log(item);
        }

2.Dictionary:

Dictionary<int,string> dic = new Dictionary<int,string>();

        //增        
        dic.Add(1, "123");
        dic.Add(2, "234");
        dic.Add(3, "345");

        //删
        //1.只能通过键去删除,删除不存在的键没反应
        dic.Remove(1);
        dic.Remove(4);
        //2.清空
        dic.Clear();

        dic.Add(1, "123");
        dic.Add(2, "234");
        dic.Add(3, "345");
        //查
        //1.通过键查看值
        //找不到直接报错!!!!!!
        Debug.Log(dic[1]);
        //2.查看是否存在
        //根据键查
        if (dic.ContainsKey(1)) { Debug.Log("存在键为1"); };
        //根据值查
        if (dic.ContainsValue("123")) { Debug.Log("存在值为123的"); };

        //改
        dic[1] = "999";

        //遍历
        //1.遍历键
        //2.遍历值
        //3.遍历全部
        foreach (var item in dic.Keys)
        {
            Debug.Log(item);
            Debug.Log(dic[item]);
        }
        foreach (var item in dic.Values)
        {
            Debug.Log(item);
        }
        foreach (KeyValuePair<int,string> item in dic)
        {
            Debug.Log("键" + item.Key + "值" + item.Value);
        }

string[] str = { "壹", "贰", "叁", "肆", "伍","陆", "柒", "捌", "玖", "拾" }; 
        Dictionary<string,string> dic = new Dictionary<string,string>();
        for (int i = 0; i < str.Length; i++)
        {
            dic.Add(i.ToString(), str[i]);
        }
        string rang = UnityEngine.Random.Range(0,1000).ToString();
        //Debug.Log(rang);
        foreach (var item in rang)
        {
            if(dic.ContainsKey(item.ToString()))
            { 
                Debug.Log(dic[item.ToString()]);
            }
        }

3.数据结构:
数据结构是计算机存储、组织数据的方式(规则)
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.
比如自定义的一个类也可以称为一种数据结构自己定义的数据组合规则
简单点理解,就是人定义的存储数据和表示数据之间关系的规则而已

常用的数据结构(前辈总结和制定的一些经典规则)
数组、栈、队列、链表、树、图、堆、散列表(哈希表)

线性表是一种数据结构,是由n个具有相同特性的数据元素的有限序列
比如数组、Array List、Stack、Queue、链表等等

顺序存储和链式存储是数据结构中两种存储结构
数组、Stack、Queue、List、Array List——顺序存储
只是数组、Stack、Queue的组织规则不同而已

顺序存储:
用一组地址连续的存储单元依次存储线性表的各个数据元素

单向链表、双向链表、循环链表一链式存储

链式存储(链接存储):
用一组任意的存储单元存储线性表中的各个数据元素

public class test : MonoBehaviour
{    
    private void Start()
    {
        LinkList<int> linkList = new LinkList<int>();
        linkList.Add(0);
        linkList.Add(1);
        linkList.Add(2);
        linkList.Add(3);
        LinkNode<int> node = linkList.head;
        while (node != null)
        {
            Debug.Log(node.value);
            node = node.nextNode;
        }
        linkList.Remove(2);
        node = linkList.head;
        while (node != null)
        {
            Debug.Log(node.value);
            node = node.nextNode;
        }
        linkList.Remove(0);
        node = linkList.head;
        while (node != null)
        {
            Debug.Log(node.value);
            node = node.nextNode;
        }
    }
}
class LinkNode<T>
{
    public T value;

    public LinkNode<T> nextNode;

    public LinkNode(T t)
    {
        this.value = t;
    }
}
class LinkList<T>
{
    public LinkNode<T> head;
    public LinkNode<T> tail;
    public void Add(T value)
    {
        LinkNode<T> node = new LinkNode<T>(value);
        if(head == null)
        {
            head = node;
            tail =node;
        }
        else
        {
            tail.nextNode = node;
            tail = node;
        }
    }

    public void Remove(T value)
    {
        if(head == null)
        {
            return;
        }
        if (head.value.Equals(value))
        {
            head = head.nextNode;
            如果头结点被移除,发现头结点变空,证明只有一个节点,尾也要置空
            if (head == null)
            {
                tail = null;
            }
            return;
        }
        LinkNode<T> node = head;
        while (node.nextNode != null) { 
            if(node.nextNode.value.Equals(value))
            {
                当前找到的元素上个节点,指向自己的下个节点。
                node.nextNode = node.nextNode.nextNode;
                break;
            }
            node = node.nextNode;
        }
    }
}

顺序存储和链式存储的优缺点

从增删查改的角度去思考:
增:链式存储 计算上 优于顺序存储(中间插入时链式不用像顺序一样去移动位置)
删:链式存储 计算上 优于顺序存储(中间删除时链式不用像顺序一样去移动位置)
查:顺序存储 使用上 优于链式存储(数组可以直接通过下标得到元素,链式需要遍历)
改:顺序存储 使用上 优于链式存储(数组可以直接通过下标得到元素,链式需要遍历)

4.LinkedList

 LinkedList<int> ints = new LinkedList<int>();

        //增
        //1.在链表尾部加元素
        ints.AddFirst(0);
        //2.在链表头部加元素
        ints.AddLast(1);
        ints.AddLast(2);
        ints.AddLast(3);
        ints.AddLast(4);
        //3.在某一个节点之后添加一个节点
        //要指定节点 先得得到一个节点
        LinkedListNode<int> n = ints.Find(2);
        ints.AddAfter(n, 100);
        //4.在某一个节点之前添加一个节点
        //要指定节点 先得得到一个节点
        LinkedListNode<int> m = ints.Find(3);
        ints.AddBefore(m, 120);

        //删
        //1.移除头结点
        ints.RemoveFirst();
        //2.移除尾结点
        ints.RemoveLast();
        //3.移除指定节点
        //无法通过位置直接删除
        ints.Remove(2);
        //4.清空
        ints.Clear();

        ints.AddFirst(0);
        ints.AddLast(1);
        ints.AddLast(2);
        ints.AddLast(3);
        //查
        //1.头结点
        LinkedListNode<int> first = ints.First;
        //2.尾结点
        LinkedListNode<int> last = ints.Last;
        //3.找到指定值节点
        //无法直接通过下标获取中间值
        //只有遍历查找指定位置元素
        LinkedListNode<int> node = ints.Find(1);
        //找不到返回null
        //4.判断是否存在
        if (ints.Contains(0))
        {
            Debug.Log("存在0");
        }

        //改
        ints.First.Value = 10;

        //遍历
        //1.foreach
        foreach (int i in ints)
        {
            Debug.Log(i);
        }
        //2.节点遍历
        //头到尾
        LinkedListNode<int> noeHead = ints.First;
        while (noeHead != null)
        {
            Debug.Log(noeHead.Value);
            noeHead = noeHead.Next;
        }
        //尾到头
        noeHead = ints.Last;
        while (noeHead != null)
        {
            Debug.Log(noeHead.Value);
            noeHead = noeHead.Previous;
        }
    }

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

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

相关文章

Java内存模型—工作流程、volatile原理

导入 最近在做项目的时候发现很多业务上用到了多线程&#xff0c;通过多线程去提升程序的一个运行效率&#xff0c;借此机会来复盘一下关于并发编程的相关内容。为什么要使用volatile&#xff1f;volatile底层原理是什么&#xff1f;JMM内存模型解决的是什么问题&#xff1f;带…

基于 OpenCV 开发实现眨眼计数器

文末提供免费的源代码下载链接 在本教程中,我们将了解如何使用 Dlib、Python 和 OpenCV 创建眨眼检测器/计数器。 我们将首先使用 Dlib 的人脸检测器来检测视频中的人脸。然后我们将使用 Dlib 中的形状预测器来确定眼睛在面部的位置。 最后,我们将使用眼睛的标志来计算眼睛…

小白必看:这些项目可以让你轻松月入过万

月入五W的互联网副业野路子。总有一个适合你!刷到这篇回答的。就不要在看其他的了。 这些互联网项目你也能做 1、认识个哥们&#xff0c;每天去一些热门的寺庙拍视频开直播&#xff0c;帮人代请手串&#xff0c;每串赚15元&#xff0c;月入5万多&#xff0c;非常非常稳定。 2…

基于SpringBoot+vue的口腔管家平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Image Sensor的像素时钟计算

本文介绍Image Sensor的像素时钟计算。 在配置Image Sensor寄存器的过程中&#xff0c;像素时钟至关重要&#xff0c;它的正确设置关系到帧率&#xff0c;曝光参数的正确与否。我们从相关资料中了解到像素时钟有多种方法&#xff0c;究竟该选择哪一种呢&#xff0c;本文来对常…

【C++】函数绑定器技术

1. 函数绑定器技术&#xff0c;什么情况可以用到这种技术实现? 占位符和函数绑定器技术&#xff08;如std::bind&#xff09;可以在以下情况下使用&#xff1a; 参数绑定&#xff1a;当你想要绑定函数的某些参数&#xff0c;但又不想立即提供这些参数的值时&#xff0c;可以…

在idea中使用Git技术

1.配置git环境 打开idea,点击file->setting->搜索git&#xff0c; 将git的安装路径填写进去 2.去gitee创建一个远程仓库 3.拉入一个.gitignore文件&#xff0c;过滤掉不需要管理的文件 4.在idea进行如下操作 5.选择要提交的内容 目前只是保存在了本地仓库 6.推送到远端…

简单尝试将go项目用宝塔部署到服务器

最近写了一个go项目的小demo打算放到服务器上&#xff0c;但是中间遇到一些问题&#xff0c;这里我记录下&#xff1a; 一、找一个文件夹将打包后的go项目放进去&#xff0c;如图 二、安装执行exe文件的wine 终端执行命令 yum install wine 终端在这&#xff0c;如图&#xf…

macOS Sonoma 14 beta 3 (23A5286g) Boot ISO 原版可引导镜像下载

macOS Sonoma 14 beta 3 (23A5286g) Boot ISO 原版可引导镜像&#xff0c;7 月 5 日&#xff08;北京时间今日凌晨&#xff09;已发布 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U…

从0开始学架构-架构的定义

从0开始学架构-架构的定义 文章目录 从0开始学架构-架构的定义系统与子系统模块与组件框架与架构软件框架&#xff08;Software framework&#xff09;软件架构区别 重新定义架构&#xff1a;4R 架构软件架构重新定义 三组容易混淆的概念&#xff1a; 系统与子系统模块与组件框…

文档翻译器那么多,你知道文档翻译pdf哪个软件好吗?

曾经有一个年轻的学生&#xff0c;名叫小杰。他是一名热爱学习的人&#xff0c;对于跨文化交流和学习外语充满了好奇和热情。然而&#xff0c;他在阅读一些重要的学术论文和研究资料时&#xff0c;常常遇到一个令人头痛的问题&#xff1a;如何将外文的pdf文档准确地翻译成自己的…

小白必看!关于欧盟商标注册须知事项?

一、什么是欧盟商标&#xff1f; 答&#xff1a; 欧盟商标是指根据CTMR&#xff08;欧共体商标条例&#xff09;规定的条件获得OHIM&#xff08;欧共体内部市场协调局&#xff09;注册的&#xff0c;在欧盟范围内有效的&#xff0c;用来识别和区分商品或服务的标记。 二、欧盟…

【前端面试专栏】<script> 脚本以及 <link> 标签对 DOM 的影响

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

解决方法:python: not found问题

一、问题 测试环境&#xff1a;Ubuntu22.04.1 在运行一些脚本文件的时候&#xff0c;报以下错误&#xff1a; ./build.sh: python: not found二、原因 python 可能被 python2 或者 python 3 代替了导致映射不到。 三、解决方法 查看所有的 python 映射 ls -l /usr/bin/py…

现代化个人博客系统 ModStartBlog v7.7.0 博客关键词优化,附件上传重构

现代化个人博客系统 ModStartBlog v7.7.0 博客关键词优化&#xff0c;附件上传重构 ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基…

【电路原理学习笔记】第2章:电压、电流和电阻:2.5 电阻

第2章&#xff1a;电压、电流和电阻 2.5 电阻 当固体导体中有电流时&#xff0c;自由电子在该材料中运动&#xff0c;有时会与原子发生碰撞。这些碰撞使电子失去一些能量&#xff0c;因此它们的运动会受到限制。碰撞越多&#xff0c;电子的流动就越受限制。这一限制因材料类型…

基于Java+Swing+mysql实现垃圾分类管理系统

基于JavaSwingmysql实现垃圾分类管理系统 一、系统介绍二、功能展示1.登陆2.社区管理3.设备管理4.垃圾管理 三、其它1.其他系统实现2.获取源码 一、系统介绍 该系统实现了 管理员:系统登陆、社区管理、设备管理、垃圾管理 小区负责人&#xff1a;查看垃圾分类信息、垃圾站信息…

【雕爷学编程】Arduino动手做(136)---0.91寸OLED液晶屏模块2

0.91寸OLED液晶屏显示模块参数 驱动芯片&#xff1a;SSD1306 支持接口&#xff1a;I2C 显示颜色&#xff1a;白色 高分辨率&#xff1a; 12832 可视角度&#xff1a;大于160 工作电压&#xff1a;3.3V / 5V 模块大小&#xff1a;36 x 12.5&#xff08;mm&#xff09; 项目之三&…

2022年4月自写json转table记录

表头属性 属性名描述类型默认值key 设置字段名。通常是表格数据列的唯一标识 string-label 设置列的标题。 string-width 设置列宽。若不填写&#xff0c;则自动分配&#xff1b;若填写&#xff0c;则支持值为&#xff1a;数字、百分比。如&#xff1a; width: 200 / width: 30…

mysql的两种安装方式(yum在线安装和通用二进制)

文章目录 msqly的安装一、yum在线安装二、通用二进制安装mysql msqly的安装 一、yum在线安装 yum是一种在线安装方式&#xff0c;通过官网网址在linux下载安装 首先是配置一个yum安装源 yum install http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm也…