首页 > 其他分享 >Delphi TDictionary字典类

Delphi TDictionary字典类

时间:2024-03-12 20:11:06浏览次数:24  
标签:end TStringList Delphi dic sl 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>;
begin
    dic := TDictionary<string, Integer>.Create;
end;
 

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

// RemoveDuplicates 函数接受一个字符串数组作为输入,使用字典来记录数组中的唯一元素,并返回去重后的数组。
function RemoveDuplicates(const arr: TArray<string>): TArray<string>;
var
  dic: TDictionary<string, Boolean>; // 声明 TDictionary 用于记录唯一元素,值为 Boolean 表示只需记录键而不需值
  value: string; // 用于遍历输入数组中的元素
begin
  dic := TDictionary<string, Boolean>.Create; // 创建字典
  try
    for value in arr do // 遍历输入数组
    begin
      if not dic.ContainsKey(value) then // 如果字典中不包含当前值
      begin
        dic.Add(value, True); // 将当前值添加到字典中,值设置为 True
      end;
    end;

    Result := dic.Keys.ToArray; // 将字典的键(唯一元素)转换为数组并返回
  finally
    dic.Free; // 释放字典对象
  end;
end;

注意,重复添加字典中已存在的KEY 会报错,所以需要用ContainsKey方法来判断一下当前KEY是否已经存在,如果没有再添加进字典.

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

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

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

function TForm2.SortDic(dic: TDictionary<string, integer>): TStringList;
begin
  var sl := TStringList.Create;
  try
    for var k in dic.keys do
    begin
      sl.Add(k + '@' + IntToStr(dic[k]));
    end;
    sl.Sorted := true;  //对TStringList进行自动排序
  finally
    result := 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
begin
    var 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单元格里.

标签:end,TStringList,Delphi,dic,sl,TDictionary,字典
From: https://www.cnblogs.com/yoooos/p/18069111

相关文章

  • 从keys命令出发-浅谈redis的字典和字典迭代器
    1.keys命令keys命令相信大家应该都用过,该命令会遍历整个redis的字典空间,对要查找的key进行匹配并返回。就像官方文档所说:在生产环境使用该方法的过程中要非常小心,因为redis服务器在执行该命令的时候其他客户端读写命令都会被阻塞。使用方法:KEYSpattern示例:127.0.0.1:6379......
  • SqlServer 多叉树字典表设计最佳实践探索
    目录多叉树设计需求设计思路方案一、范式设计(双表方案)字典表+闭包表+ParantId+路径枚举适用范围优点缺点D_Dictionary_FirstPlan字典表设计图D_Dictionary_FirstPlan字典表模型图D_Dictionary_FirstPlan字典表数据展示D_Dictionary_FirstPlan_Closure闭包表设计图D_Dictionary_F......
  • delphi 中 StringHelper 详解,字符串常见操作
    大小写转换functionToLower:string;functionToLower(LocaleID:TLocaleID):string;functionToLowerInvariant:string;functionToUpper:string;functionToUpper(LocaleID:TLocaleID):string;functionToUpperInvariant:string;classfunctionLowerCase(const......
  • Dict【字典】
    定义:字典是一种映射类型,它的元素是键值对,字典的键必须为不可变类型,且不能重复;键可以是任意不可变类型(元祖/字符串/数字)推荐:字典的键推荐使用:英文字符创建字典的方式:(1)直接使用{}(2)使用dict() 字典的使用字典初始化:【1】字典的创建初始化:一个键一个值,一一对应a=......
  • delphi 判断类是否实现接口,获取类实现的接口
    判断类是否实现接口,获取类实现的接口代码typeICeShi=interface['{37CABB9D-CAA2-4589-A0C8-5AA1424E525B}']functionToPrint:string;end;TCeShi=class(TInterfacedObject,ICeShi)functionToPrint:string;end;procedureTForm1.Button1Cli......
  • delphi xe 好用的日志框架
    菜单:Project-->Options-->SearchPath引入地址如:E:\Software\DelphiLib\loggerpro_1_3_1interfaceusesLoggerPro,Winapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,......
  • 常见的弱口令 密码字典 下载网站
    Weakpass:这是一个专门提供弱口令字典的网站,包括单词、数字、常用密码、常见手机号码等。官网地址:https://weakpass.com/SecList:这是一个安全研究者和渗透测试人员常用的资源库,其中收集了一个"Passwords"目录,包含着许多大型的字典文件,包括弱口令字典。官网地址:https://g......
  • python Ai 应用开发基础训练,字符串,字典,文件
    --------------------------------------  编程能是大模型应用的天花板..................................................................所以要好好将大模型应用在企业一定要好好练好最看不起的一环,基础能力字符串处理 本文档来自老男孩培训Alex课程记录,我在2017年......
  • Delphi11安装Android安卓SDK
    由于Google的AndroidSDK不再允许其他程序分发。Delphi11安装后,默认是没有Android安卓SDK的,在默认安装路径的情况下,在C:\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidSDK-2525-22.0.46141.0937\目录下面,只有最基本的安卓SDK的命令行工具,我们可以使......
  • python字典存入csv
     存入csvimportcsvfromconfig.globalparameterimportexecl_saveimportcsvtitle='这是一个标题'price=23.45deal=5location='广东广州'province='广东'city='广州'shop='门店'result=1#构建商品信息字典pr......