c#数据结构-有序列表和有序字典

news2024/12/26 23:21:25

有序列表和有序字典

有序列表和有序字典都是是一个键值对容器,像字典一样。
从习惯和描述推测,

  • 列表控制一个数组
  • 有序列表使用比有序字典更少的内存
  • 如果一次性添加一堆数据,且这堆数据有序。那么有序列表比有序字典更快

有序列表大概长这样
在这里插入图片描述
而有序字典长这样
在这里插入图片描述
所以如果更多的倾向于只读,那么有序列表会更合适。

实现排序

作为键的类型,必须实现排序接口。
在插入到列表中的时候会使用排序接口的方法来决定放哪。
但是之后不会时刻保证他在正确的位置。如果你修改他的内容让他应在的位置有变化,列表是不知道的。

创建

可以啥也不填,也可以填入一个字典接口来初始化元素。排序列表使用数组,依然可以填入数字来初始化数组大小。

Dictionary<string, int> dic = new Dictionary<string, int>() { ["https"] = 5 };

SortedDictionary<string, int> sortDic1 = new SortedDictionary<string, int>();
SortedDictionary<string, int> sortDic2 = new SortedDictionary<string, int>(dic);

SortedList<string, int> sortList1 = new SortedList<string, int>();
SortedList<string, int> sortList2 = new SortedList<string, int>(10);
SortedList<string, int> sortList3 = new SortedList<string, int>(dic);

访问

索引器可以用于添加 / 覆盖元素,和用来访问元素。

sortList["hello"] = 5;
sortList["apple"] = 5;
sortList["carch"] = 3;
sortList["carch"] = 3;

int p = sortList["carch"];

仅限有序列表,可以通过索引来访问和修改值。

var key = sortList.GetKeyAtIndex(3);
var value = sortList.GetValueAtIndex(3);
sortList.SetValueAtIndex(2, 80);

遍历

如果没有因为修改键元素内容导致顺序发生变化,那么他的内容是根据键有序的。

foreach (string item in sortList.Keys)
{
	Console.WriteLine(item);
}
Console.WriteLine("========");
foreach (int item in sortList.Values)
{
	Console.WriteLine(item);
}
Console.WriteLine("========");
foreach (KeyValuePair<string, int> item in sortList)
{
	Console.WriteLine(item);
}

查找元素

ContainsKey和ContainsValue可以确定当前集合是否有指定的 键 /

sortList.ContainsKey("carch");
sortList.ContainsValue(3);

仅限于有序列表,他是用数组存储的,可以找索引

int indexKey = sortList.IndexOfKey("carch");//没找到返回-1
int indexValue = sortList.IndexOfValue(3);//没找到返回-1

删除元素

使用Remove删除指定对应的元素。
进行有序列表,可以删除指定索引下的元素。

sortList.Remove("carch");
sortList.RemoveAt(1);

有序列表的数组容量

有序列表依然可以用属性和方法控制他背后数组的大小。

Console.WriteLine(sortList.Capacity);//获取数组大小
sortList.Capacity = 50;//设置数组大小,不能低于已占用元素数量
sortList.TrimExcess();//如果元素数量低于90%总容量,裁切数组到元素数量。

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

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

相关文章

最后一个单词的长度-力扣58-java

一、题目描述给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1&#xff1a;输入&#xff1a;s "Hello World"输出&#x…

聊聊火出圈的ChatGPT

前言 OpenAI 近期发布聊天机器人模型 ChatGPT&#xff0c;迅速火爆各大技术网站&#xff0c;就像一个突然激起的巨浪打破了沉寂已久的水面。它的出现无论是对人工智能的资本圈还是技术圈都感受到了春风回暖&#xff0c;前兔似锦的未来。 尤记得2015年谷歌开源的Tensorflow&am…

2.19、读者-写者问题

有读者和写者两组并发进程&#xff0c;共享一个文件&#xff0c;当两个或两个以上的读进程同时访问共享数据时不会产生副作用&#xff0c; 但若某个写进程和其他进程&#xff08;读进程或写进程&#xff09;同时访问共享数据时则可能导致数据不一致的错误。 因此要求: ①允许…

新专利:苹果笔可充当VR游戏控制器,智能笔与Find My结合将成为趋势

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果获得了一项关于 Apple Pencil 的技术专利。根据专利描述&#xff0c;Apple Pencil 可以和混合现实头显、iPad、Mac 显示器等设备进行交互和操作&#xff0c;可以充当 VR 游戏的控制器。 该专利的…

Three.js 3D建模必备基础

在 three.js 中&#xff0c;可见对象由几何体和材质构成。 我们已经了解了如何创建适用于点和线图元的简单几何图形&#xff0c;并且遇到了各种标准网格几何图形&#xff0c;例如 THREE.CylinderGeometry 和 THREE.IcosahedronGeometry。 在本节中&#xff0c;我们将了解如何从…

【Unity 代码相关】实现脚本之间动态变量传递

这是我在做作品的过程中遇到的问题&#xff0c;大概阐述一下遇到的问题及解决思路。 1 问题阐述 因为是做天空盒&#xff0c;有很多变量需要控制&#xff0c;shader之间又想实现颜色、变量的传递&#xff0c;所以整个项目的所有暴露出来的可调整变量&#xff0c;我都汇总在了…

算法训练营DAY53|392.判断子序列、115.不同的子序列

392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/is-subsequence/ 判断子序列这道题目&#xff0c;和上一期的题解法几乎完全相同&#xff0c;只是递推公式有一点差别&#xff0c;但是要是完全用之前的代码也是可行的。…

模拟信号隔离放大器直流信号转换0-20mA/ 4-20mA/2-10V/0-±5V/0-±10V

概述&#xff1a;导轨安装DIN11 IPO EM系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要电量隔离测控的行业。该模块内部嵌入了一个高效微功率的电源&#xff0c;…

【Linux系统编程】02:文件操作

文件IO 系统调用&#xff08;不带缓冲的IO操作&#xff09;库函数&#xff08;默认带用户缓冲的IO操作&#xff09; 一、非缓冲IO 系统调用&#xff1a;即为不带缓冲的IO 1.打开文件open 2.读取文件read NAMEread - read from a file descriptorSYNOPSIS#include <unist…

Spring Boot HTTP 400排查

背景 前段时间朋友咨询他们公司某个HTTP接口偶现400错误&#xff0c;有没有什么好的分析方法和解决方案&#xff0c;使用的是Spring Cloud体系。最近有时间总结下这个问题的处理过程。 为了分析问题&#xff0c;笔者使用 Spring Boot 3.0.2还原报错场景进行讲解。 问题分析 …

OM | 强化学习 + 约束规划求解组合优化问题

组合优化在航空航天、交通规划以及经济学等众多学科领域中有广泛应用&#xff0c;其目标是在有限集中寻找最优解。然而状态空间过大的问题让目前组合优化变得棘手。在过去的几年中&#xff0c;使用深度强化学习&#xff08;deep reinforcement learning&#xff0c;DRL&#xf…

SharpSCCM:一款利用SCCM实现横向渗透的强大工具

关于SharpSCCM SharpSCCM是一款功能强大的横向渗透和凭证收集工具&#xff0c;该工具主要利用了微软终端配置管理器&#xff08;SCCM&#xff09;来实现其功能&#xff0c;并能够通过访问SCCM管理终端GUI来实现横向渗透和凭证收集。 功能介绍 1、后渗透功能&#xff0c;支持横…

QT入门Input Widgets之QSlider

目录 一、界面布局功能 1、界面位置介绍 2、控件界面基本属性 2.1horizontalSlider界面属性 2.2设置步进 2.3打开或关闭滑块跟踪&#xff08;setTracking&#xff09; 二、属性功能介绍 1、常用信号 2、调用信号 3、鼠标点击QSlider滑块定在点击位置 三、Demo展示 …

2.8、调度算法的评价指标

1、CPU 利用率 由于早期的 CPU 造价极其昂贵&#xff0c; 因此人们会希望让CPU尽可能多地工作\color{red}希望让 \texttt{CPU} 尽可能多地工作希望让CPU尽可能多地工作 CPU利用率\color{red}\texttt{CPU}利用率CPU利用率&#xff1a;指 CPU “忙碌” 的时间占总时间的比例。 利…

动态规划之01背包问题和完全背包问题

01背包的问题描述&#xff1a;&#xff08;内容参考代码随想录&#xff09;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。问题示例&#…

Echarts 设置折线图拐点的颜色,边框等样式,hover时改变颜色

第014个点击查看专栏目录上一篇文章我们讲到了如何设置拐点大小,图形类型&#xff0c;旋转角度&#xff0c;缩放同比&#xff0c;位置偏移等&#xff0c;这篇文章介绍如何设置拐点的颜色、边框大小颜色等样式。hover轴线时候&#xff0c;拐点的填充颜色改变文章目录示例效果示例…

Zookeeper安装部署

文章目录Zookeeper安装部署Zookeeper安装部署 将Zookeeper安装包解压缩&#xff0c; [rootlocalhost opt]# ll 总用量 14032 -rw-r--r--. 1 root root 12392394 10月 13 11:44 apache-zookeeper-3.6.0-bin.tar.gz drwxrwxr-x. 6 root root 4096 10月 18 01:44 redis-5.0.4 …

什么时候用MQ、MQ 的作用、延迟消息

本文主要参考沈剑大佬的消息队列系列的四篇博文和博文评论&#xff0c;以及刘海丰老师的《架构设计面试精讲》&#xff0c;文末是完整参考。 1、什么时候用MQ、MQ 的作用 MQ是一个互联网架构中常见的解耦利器。 1.1 MQ 的组成 Producer&#xff1a;消息的生产者&#xff1b; Br…

浅谈函数式编程和命令式编程的区别

一、函数式编程 ------------------------------------------------------------------------------------------------------------------------------------------ 函数式编程用一个英文单词来说的话就是“What?” 它关注结果 定义 把某个功能的具体实现&#xff0c;封装…

一文带你搞懂,Python语言运算符

Python语言支持很多种运算符&#xff0c;我们先用一个表格为大家列出这些运算符&#xff0c;然后选择一些马上就会用到的运算符为大家进行讲解。 说明&#xff1a;上面这个表格实际上是按照运算符的优先级从上到下列出了各种运算符。所谓优先级就是在一个运算的表达式中&#x…