Delphi TDictionary字典类

TDictionary 是一个开放哈希表,支持泛型,并提供了以下常用属性和方法:

属性:

Count:返回字典中元素的数量。
Keys:返回字典中所有键所组成的动态数组。
Values:返回字典中所有值所组成的动态数组。

方法:

Add:向字典中添加一个键和其对应的值。
Clear:清空字典中的所有元素。
ContainsKey:判断字典中是否包含指定的键。
ContainsValue:判断字典中是否包含指定的值。
Remove:从字典中删除指定的键以及对应的值。
TryGetValue:尝试从字典中获取指定键所对应的值。
GetEnumerator:返回一个用于枚举字典中元素的对象(TDictionary<_,_>.TPairEnumerator 类型)。

除此之外,TDictionary 还提供了一些其他方法和事件,如 `OnChange`, `TrimExcess`, `IndexOfKey` 和 `IndexOfValue`。具体用法可以参考 Delphi 文档或自行搜索。

声明与创建时,需要指明K与V的数据类型,比如:

var dic: TDictionary<string, integer>;
begindic := TDictionary<string, Integer>.Create;
end;

示例一:对数据(数组)去重.以下代码实现了对数组元素的去重:

// RemoveDuplicates 函数接受一个字符串数组作为输入,使用字典来记录数组中的唯一元素,并返回去重后的数组。
function RemoveDuplicates(const arr: TArray<string>): TArray<string>;
vardic: TDictionary<string, Boolean>; // 声明 TDictionary 用于记录唯一元素,值为 Boolean 表示只需记录键而不需值value: string; // 用于遍历输入数组中的元素
begindic := TDictionary<string, Boolean>.Create; // 创建字典tryfor value in arr do // 遍历输入数组beginif not dic.ContainsKey(value) then // 如果字典中不包含当前值begindic.Add(value, True); // 将当前值添加到字典中,值设置为 Trueend;end;Result := dic.Keys.ToArray; // 将字典的键(唯一元素)转换为数组并返回finallydic.Free; // 释放字典对象end;
end;
注意,重复添加字典中已存在的KEY 会报错,所以需要用ContainsKey方法来判断一下当前KEY是否已经存在,如果没有再添加进字典.

上面的红字部分代码稍微修改一下,也可以用来对相同key的值的累加:

if dic.ContainsKey(sKey) thendic[sKey] := dic[sKey] + SuNumber
elsedic.Add(sKey, SuNumber);

示例二: 对字典进行排序.这里注意一下,字典是一个开放哈希表,无法直接排序.

function TForm2.SortDic(dic: TDictionary<string, integer>): TStringList;
beginvar sl := TStringList.Create;tryfor var k in dic.keys dobeginsl.Add(k + '@' + IntToStr(dic[k]));end;sl.Sorted := true;  //对TStringList进行自动排序finallyresult := sl;end;
end;//使用var sl:=TStringList.Create;
sl:=SortDic(dic)

上面的代码,把字典里的K,V用"@"符号拼接了起来,塞进一个TStringList类里.字典不可以排序,但是TStringList可以啊,只是在使用里,需要SPLIT一下元素才行

sl := SortDic(dic);
k := 2;
for var key in sl do
beginvar temparr := key.Split(['@']);ws2.range['E' + inttostr(k) + ':K' + inttostr(k)].value := VarArrayOf([temparr[0],temparr[5], temparr[1], temparr[2], '新刀具区', 0, temparr[4]]);k := k + 1;
end;

上面这段代码是把TStringList里面的数据写进EXCEL单元格里.

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

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

相关文章

第二十五周代码(蓝桥杯查缺补漏)

2024/03/31 周日 填充 题目链接 【参考代码】 想用暴力&#xff0c;没过 //枚举&#xff0c;未出结果QAQ #include <bits/stdc.h> using namespace std; string s00 "00"; string s11 "11"; int ans 0; //m个问号&#xff0c;子串有2^m…

1-32 异常

一 什么是异常? 1.含义:异与正常状态的显示,控制台显示的结果和预期的结果不一致 2.例如: int[] nums new int[2]; System.out.println(nums[2]); --抛出异常 二 异常分类 1.检测性异常:又称 非运行时异常,一般编写代码过程中编辑器直接报错 2.非检测性异常(常用):又称为…

牛客 2024春招冲刺题单 ONT98 牛牛猜节点【中等 斐波那契数列 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6a3dfb5be4544381908529dc678ca6dd 思路 斐波那契数列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…

达梦数据库的交互工具disql

达梦数据库的交互工具disql 1 功能简介 DIsql 是 DM 数据库的一个命令行客户端工具&#xff0c;用来与 DM 数据库服务器进行交互。DIsql 是 DM 数据库自带的工具&#xff0c;只要安装了 DM 数据库&#xff0c;就可以在应用菜单和安装目录中找到。 DIsql 识别用户输入&#xf…

让chatGPT控制物理设备

作为自动控制行业的工程师&#xff0c;我们也许最关心的是如何使chatGPT 控制物理设备。我发现许多人仍然停留在传统程序设计的思维阶段&#xff0c;比如让大模型编写一段PLC 代码&#xff0c;或者是生成一些信息模型。 其实大模型具备判断与思考的能力&#xff0c;AI …

ARM v8 Cortex R52内核 02 程序模型 Programmers Model

ARM v8 Cortex R52内核 02 程序模型 Programmers Model 2.1 关于程序模型 Cortex-R52处理器实现了Armv8-R架构。这包括&#xff1a; 所有的异常级别&#xff0c;EL0-EL2。 每个异常级别下的AArch32执行状态。 T32和A32指令集&#xff0c;其中包括&#xff1a; 浮点运算。 …

Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析)

正则表达式实战-腾讯新闻 需求&#xff1a; 使用正则获取腾讯新闻标题内容 网站&#xff1a;https://sports.qq.com/ 代码&#xff1a; import reimport requests from fake_useragent import UserAgenturl https://sports.qq.com/ # 构建请求头信息 headers {User-Agent:…

【Frida】【Android】 工具篇:ProxyPin抓包详解

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

SSL VPN

1、SSL (Secure Sockets Layer)一种加密的通讯协定,用在使用者与网服器之间 【1】安全套接层 位于传输层和应用层之间,保护应用层的数据(HTTPS(443)=HTTP+TLS) 【2】版本 SSLv2 SSLv3 修改→TLS (Transport Layer Security)安全传输层协议,) 【3】模式 采用…

Vue.js梳理({}语法与指令)

一、原生API vs 函数库 vs 框架 原生API 浏览器/平台已实现的&#xff0c;可直接使用的原生函数 问题&#xff1a;代码繁琐 函数库&#xff08;library&#xff09; 基于原生API基础上&#xff0c;进一步封装的&#xff0c;更简化的一组函数的集合 框架&#xff08;framew…

Linux文件种类、扩展名与目录配置详解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 二、Linux文件种类 1、纯…

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据)

高精度端到端在线校准环视相机和LIDAR&#xff08;精度0.2度内&#xff01;无需训练数据&#xff09; 附赠自动驾驶学习资料和量产经验&#xff1a;链接 写在前面 在自动驾驶车辆的使用寿命内&#xff0c;传感器外参校准会因振动、温度和碰撞等环境因素而发生变化。即使是看似…

【leetcode279】完全平方数,动态规划解法

原问题&#xff1a;给定一个非负整数n&#xff0c;如果把它视作一些完全平方数的和&#xff0c;那么最少需要多少个完全平方数&#xff1f; 这次学习到一个热心网友的解法&#xff1a;把问题转化兑换零钱问题&#xff0c;然后使用动态规划求解。 比如&#xff0c;给定 n12, 那…

分布式锁实战

4、分布式锁 4.1 、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#x…

python爬虫学习第十五天-------ajax的get和post请求

嗨嗨嗨&#xff01;兄弟姐妹大家好哇&#xff01;今天我们来学习ajax的get和post请求 一、了解ajax Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种在 Web 开发中用于创建交互式网页应用程序的技术。通过 Ajax&#xff0c;网页可以在不重新加载整个页面…

【代码随想录】day35

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、860柠檬水找零二、406根据身高重建队列三、452用最少数量的箭引爆气球 一、860柠檬水找零 class Solution { public:bool lemonadeChange(vector<int>&a…

一文解析智慧城市,人工智能技术将成“智”理主要手段

长期以来&#xff0c;有关智慧城市的讨论主要围绕在技术进步方面&#xff0c;如自动化、人工智能、数据的公开以及将更多的传感器嵌入城市以使其更加智能化。实际上&#xff0c;智慧城市是一个关于未来的设想&#xff0c;其重要原因在于城市中存在各种基础设施、政治、地理、财…

操作系统(7分)

进程管理 进程的状态 前趋图 表达哪些任务可以先运行&#xff0c;任务间运行的先后顺序。 进程的同步与互斥 在多道程序环境下&#xff0c;操作系统必须采取相应措施处理好进程之间的制约关系。进程同步的主要任务是对多个有制约关系的进程在执行次序上进行协调&#xff0c;…

插入电脑的u盘文件删除了怎么恢复?删除文件恢复的5个方法

随着科技的发展&#xff0c;U盘已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;使用U盘时&#xff0c;有时我们可能会不小心删除一些重要的文件&#xff0c;这可能会给我们带来很大的困扰。那么&#xff0c;当U盘中的文件被删除后&#xff0c;我们该如何恢复呢&…

Spark编程基础

一、RDD入门 1.RDD是什么&#xff1f; RDD是一个容错的、只读的、可进行并行操作的数据结构&#xff0c;是一个分布在集群各个节点中的存放元素的集合&#xff0c;即弹性分布式数据集。 2.RDD的三种创建方式 第一种是将程序中已存在的集合&#xff08;如集合、列表、数组&a…