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

news/2025/2/19 8:44:52/

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.正向查找元素位置//找到返回位置找不到返回-1int index = list.IndexOf(0);Debug.Log(index);//4.反向查找元素位置// 找到返回位置找不到返回 - 1int 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.foreachforeach (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.ppmy.cn/news/744028.html

相关文章

达人评测 联想小新Air 14 Plus 2021酷睿版怎么样

外观方面&#xff0c;联想小新Air 14 Plus 2021酷睿版采用纤薄金属机身&#xff0c;整机轻至1.41kg&#xff0c;薄至15.9mm&#xff0c;便携性十分出色。而且还支持开盖自动开机人脸识别解锁。联想小新Air 14 Plus 2021酷睿版怎么样这些点很重要http://www.adiannao.cn/dy 屏幕…

Android性能优化问题方案的总结~

虽然总说“英雄不问出处”&#xff0c;但大厂卡学历是默认的“潜规则”。不过最近一个老弟&#xff0c;让我挺振奋的&#xff01;人家完全靠实力上岸。他就属于死磕型的&#xff0c;是我近2年见过的少有的Android性能优化高手。 要说他也挺聪明&#xff0c;贼会选领域。你出去随…

Windows系统上安装Node.js图文步骤流程

Windows系统上安装Node.js图文步骤流程&#xff0c;本文以安装Node.js v4.4.3 LTS(长期支持版本)版本为例&#xff1a; 目录 Node.js下载 Windows 上安装 Node.js 1、Windows 安装包(.msi) 2、Windows 二进制文件 (.exe)安装 版本测试 Node.js下载 Node.js 安装包及源码…

Mac网易云音乐ncm格式转mp3

Mac网易云音乐ncm格式转mp3 最近在网易云音乐上下些歌曲&#xff0c;下载好后发现大部分文件是ncm格式的&#xff0c;在Mac AppStore下载了ncm转换器&#xff0c;转了几首就收费了。 sudo pip3 install pycryptodome mutagen sudo pip3 install githttps://github.com/nondan…

Mac上使用网易云音乐上传音乐mp3到“我的音乐云盘”

前言 网易云音乐mac版&#xff0c;不支持“我的音乐云盘”的上传功能&#xff01;iPhone版也不支持&#xff01; 只能在windows上的网易云音乐里面上传mp3文件。 以下是在Mac上安装windows虚拟机&#xff0c;再上传音乐&#xff5e; 步骤 Mac上安装虚拟机VirtualBox&#x…

opensuse下安装网易云音乐netease-cloud-music

安装环境 opensuse leap 42.3&#xff08;理论上仓库中列出的支持版本都可以用此方法安装&#xff09;官方软件仓库搜索netease&#xff0c;也可直接点击此处打开&#xff1a;https://software.opensuse.org/package/netease-cloud-music?search_termnetease选择对应版本&…

基于开源网易云API+Flutter写的一款音乐播放器

历时2个多月&#xff0c;基于开源网易云API的一款使用Flutter开发的桌面音乐程序终于完成了它的第一个版本v1.0.0&#x1f389;。再次感谢大佬为我们整理并提供众多接口。 先来看看第一版的成品图。 本项目是基于Flutter3.0.5&#xff0c;Dart2.17.6开发的桌面版程序&#xff…

Ubuntu 16.04 安装网易云音乐

由于刚刚安装了网易云音乐所以对于遇到的问题进行啦相应的解决主要是依赖关系问题的配置问题 网易云音乐下载地址 http://music.163.com/#/download 进入以后选择相应的版本下载 进入下载目录然后在终端打开&#xff1a; 查看相应的列表&#xff1a; elijahElijah-Th:~$ …