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

news2025/1/13 15:57:22

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()]);
            }
        }

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

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

线性表是一种数据结构,是由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;
        }
    }
}

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

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

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

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

相关文章

Impala3.4源码阅读笔记(五)统计信息

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 基本信息 在Impala中&#xff0c;Stats记录…

【Vuejs】1732- 详细聊一聊 Vue3 依赖注入

&#x1f449; 「相关文章」 深入浅出 Vue3 自定义指令详细聊一聊 Vue3 动态组件6 个你必须明白 Vue3 的 ref 和 reactive 问题初中级前端必须掌握的 10 个 Vue 优化技巧分享 15 个 Vue3 全家桶开发的避坑经验 在 Vue.js 中&#xff0c;依赖注入[1]&#xff08;DI&#xff09;是…

中小企业做知识管理如何选择KMS?

编者按&#xff1a;&#xff08;KM&#xff09;是创建、共享、使用和管理组织的知识和信息的过程。它是指通过充分利用知识来实现组织的多学科方法。那么中小企业预算有限的情况下&#xff0c;该如何选择KMS呢 &#xff1f; 关键词&#xff1a;知识管理系统、免安装、免维护 市…

在职读研弥补学历短板——中国人民大学与加拿大女王大学金融硕士项目

在当今社会 “文凭化”的理念下&#xff0c;学历变得很重要。学历会影响到一个人成长发展的各各方面&#xff0c;当我们“工作越久&#xff0c;接触社会越久”&#xff0c;越感觉到学历的重要性。具有高学历&#xff0c;就具有更多的发展机会&#xff0c;具有更多精神上的财富&…

Basler相机一丢包就断开问题解决

问题描述&#xff1a; 两个相机&#xff0c; 一个相机aca2500-14gm连接电脑主板100M网卡没问题&#xff0c;帧率3帧&#xff0c;但是不会断。 一个相机aca2500-14gm连接USB转网口&#xff08;千兆&#xff09;&#xff0c;pylon Viewer采图丢包严重并且几秒后相机断开。 解决…

集合面试题--复杂度分析

为什么要进行复杂度分析&#xff1f; 1指导编写出性能更优的代码2评判别人写的代码的好坏 时间复杂度分析 常见复杂度表示 常见复杂度 空间复杂度

【赠书活动 - 第1期】- 测试工程师Python开发实战(异步图书出品)| 文末送书

⭐️ 赠书 - 测试工程师Python开发实战&#xff08;异步图书出品&#xff09; 当初就是因为开发做不好&#xff0c;才去做测试了…… 这句玩笑话在过去可以说是测试人员的真实写照。 常规测试工作给人的印象&#xff0c;就是弄清楚软件功能&#xff0c;编写测试用例&#xff0…

基于springboot+Redis的前后端分离项目之消息队列(六)-【黑马点评】

&#x1f381;&#x1f381;资源文件分享 链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码&#xff1a;eh11 秒杀优化、消息队列 秒杀优化1 秒杀优化-异步秒杀思路2 秒杀优化-Redis完成秒杀资格判断3 秒杀优化-基于阻塞队列实现秒杀优化 Red…

抖音矩阵系统源码开源部署分享(三)

目录 一、 概述&#xff1a; 二、 账号矩阵搭建目的&#xff1a; 三、 抖音矩阵系统源码开发步骤 四、 功能规划 五、 代码开发展示 一、 概述&#xff1a; 抖音矩阵系统是指通过多个账号运营&#xff0c;对账号之间的内容和特征进行细分&#xff0c;账号之间相互引流推广&a…

什么是数字化和数字化转型?终于有人讲明白了!

在我与不同行业、不同岗位甚至不同阶层的人谈论数字化和数字化转型的时候发现一个很有意思的现象&#xff1a; 许多人出于无知或为了自己的利益而开始混淆这两个术语&#xff0c;甚至一些人已经开始将数字化标记为数字化转型&#xff0c;以安抚管理层、获得项目批准或进行销售…

在海外我们该如何推广应用

Google Play和Apple Store上有各种各样不同的应用程序&#xff0c;大量的正面评论和高评级可以成为应用在当前市场上取得成功的关键。大多数用户更喜欢有很多应用评论&#xff0c;积极反馈和高评级的应用程序&#xff0c;因此每条应用程序评论都很重要。确保鼓励用户留下评论&a…

R语言学习——数据框

x c(42,7,64,9) y1:4 z.df data.frame(INDEXy, VALUEx) z.df dim(z.df) # 查看几行几列 colnames(z.df) # 查看列名 rownames(z.df) # 查看行名 z.df[,1] z.df[1,] z.df[c(1,2),c(1,2)]df1 data.frame(C1c(1,5,14,1,54), C2c(9,15,85,9,42), C3c(8,7,42,8,16)) df1 df2 <…

力扣 78. 子集

题目来源&#xff1a;https://leetcode.cn/problems/subsets/description/ C题解1&#xff1a;递归回溯法。由于是求子集&#xff0c;所以根据nums.size()遍历每个子集的长度&#xff0c;并进行回溯。 class Solution { public:vector<vector<int>> res;vector<…

Blazor前后端框架Known-V1.2.2

V1.2.2 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 概述 基于C#和Blazor实现的快速开发框架&#xff0c;前后端分离&#xff0c;开箱即用。跨平台&#xff0c;单页应用&#xff…

scratch 篮球反弹

scratch 篮球反弹 本程序的功能是一个角色水平移动、碰到边缘反弹&#xff0c;“篮球”初始位置和方向随机&#xff0c;接触到其它角色或边缘时反弹。 具体内容如下 “篮球”角色 男孩角色

集成运放电路计算(全)

自记&#xff1a; 常用运放电路计算与分析 1、运放的符号表示 2、集成运算放大器的技术指标 (1) 开环差模电压放大倍数(开环增益)大 Ao(Ad)Vo/(V-V-)107-1012倍; (2) 共模抑制比高 KCMRR100db以上; (3) 输入电阻大 ri>1MW, 有的可达100MW以上; (4) 输出电阻小 ro 几W-几十…

如何将语音转换成文字?分享好用的3个方法!

为了方便制作会议记录&#xff0c;通常我们会录制会议内容&#xff0c;并在后期根据录音进行整理。然而&#xff0c;许多人在整理过程中感到痛苦&#xff0c;因为需要反复听取音频才能完成整理工作。其实&#xff0c;我们可以借助记灵在线工具将语音转换为文字&#xff0c;从而…

Rust 第一天---Rust环境配置

学习一门新的语言总是令人兴奋的,新的语法特性,设计理念…当然任何新的事物总是会留有旧事物的影子,这也能帮助我们更快地学习理解.作为2015年才正式发布的“年轻”语言,安全是它最大特性也是受欢迎原因之一.通过所有权系统进行内存管理,避免了其他高级语言因垃圾回收带来的消耗…

一百二十六、DBeaver——导入CSV文件(文件中无表字段)到ClickHouse

一、目标&#xff1a;将CSV文件的数据导入到ClickHouse中 备注&#xff1a;CSV文件没有表字段&#xff0c;只有纯粹的数据 二、实施步骤 第一步&#xff0c;右击表名&#xff0c;选择导入数据 第二步&#xff0c;在源类型和格式&#xff0c;选择从CSV文件导入&#xff0c;然…