首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我应该如何在Delphi中实现一个巨大但简单的索引StringList?

在Delphi中实现一个巨大但简单的索引StringList,可以使用TDictionary类。TDictionary是一个泛型集合类,它允许您存储键值对,并根据键快速检索值。以下是如何使用TDictionary实现一个巨大但简单的索引StringList的示例:

代码语言:delphi
复制
program SimpleIndexedStringList;

{$APPTYPE CONSOLE}

uses
  System.Generics.Collections,
  System.SysUtils;

type
  TIndexedStringList = class
  private
    FDictionary: TDictionary<string, string>;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Add(const Key, Value: string);
    function GetValue(const Key: string): string;
  end;

constructor TIndexedStringList.Create;
begin
  FDictionary := TDictionary<string, string>.Create;
end;

destructor TIndexedStringList.Destroy;
begin
  FDictionary.Free;
  inherited;
end;

procedure TIndexedStringList.Add(const Key, Value: string);
begin
  FDictionary.AddOrSetValue(Key, Value);
end;

function TIndexedStringList.GetValue(const Key: string): string;
begin
  if FDictionary.TryGetValue(Key, Result) then
    Exit;
  Result := '';
end;

var
  IndexedStringList: TIndexedStringList;
begin
  IndexedStringList := TIndexedStringList.Create;
  try
    IndexedStringList.Add('key1', 'value1');
    IndexedStringList.Add('key2', 'value2');
    IndexedStringList.Add('key3', 'value3');

    WriteLn(IndexedStringList.GetValue('key1'));
    WriteLn(IndexedStringList.GetValue('key2'));
    WriteLn(IndexedStringList.GetValue('key3'));
  finally
    IndexedStringList.Free;
  end;
  ReadLn;
end.

在这个示例中,我们创建了一个名为TIndexedStringList的类,它使用TDictionary来存储键值对。我们实现了一个简单的Add方法来添加键值对,以及一个GetValue方法来根据键快速检索值。在主程序中,我们创建了一个TIndexedStringList实例,并添加了一些键值对,然后使用GetValue方法检索它们。

这种实现方式具有较高的性能,因为TDictionary使用哈希表来存储数据,因此查找速度非常快。同时,它也非常简单易用,非常适合实现巨大但简单的索引StringList。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ Qt开发:StringListModel字符串列表映射组件

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt我们可以通过拖拽方式将不同组件放到指定位置,实现图形化开发极大方便了开发效率,本章将重点介绍QStringListModel...提供了获取和设置数据接口,可以通过模型索引访问和修改数据。 适用于显示简单字符串列表,不涉及复杂数据结构。...QStringList stringList() const 获取当前模型字符串列表。...首先绘制UI界面,如下图中所示,左侧是一个ListView组件,右侧是一个PlainTextEdit组件; 1.1 初始化模型 如下代码演示了如何在 MainWindow 中使用 QStringListModel...组将将被初始化为城市地址,如下图所示; 1.2 添加与插入 如下代码演示了如何在 MainWindow 通过按钮点击事件向 QStringListModel 添加或插入数据。

22510

无代码将死,低代码长存

低代码和无代码是两回事 第一步得把低代码和无代码分清楚,因为这俩差异巨大,但现在业界经常混为一谈,导致很多很多问题,比如双方争论不是同一个事情,厂商口径乱,行业报告结果不能看。...这几类工具差别巨大,由此可见无代码是一个相当宽泛概念。如下图所示,甚至还有人将无代码和低代码江湖分成十二个“门派”。...国内看似已经有很多低代码平台,道一云之前做个一个系列测评,T 研究、海比等也都出过分析报告,只要我们对照上述标准就不难看出,虽然低代码舆论很是喧嚣,迄今为止应该说国内还很少有专业低代码平台。...(Delphi 主界面,实现了用户界面的可视化设计) (Delphi 逻辑实现界面,得写代码) 士别三日当刮目相看,何况十多年。今天低代码并不是新瓶装旧酒,而是新瓶新酒,里外都是新。...(也有一些特定类型低代码平台 App Onboard 是面向游戏开发,iVX 前端能力比较强,都比较小众,不在本文讨论范围之内) 头部互联网级应用:头部互联网应用用户量巨大,为了优化性能有很多很多

54620
  • 读了这一篇,让你少踩 ArrayList 那些坑

    是风筝,公众号「古时风筝」,一个不只有技术技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python、React 也玩儿 6 斜杠开发者。...恩,大概明白了,这可能是 ArrayList一个坑,和 subList应该有异曲同工之妙。...虽然问题很简单还是有必要看一下原因。于是,写了上面这 4 行代码做个测试,运行起来确实抛了异常,异常如下: ? 直接看源码吧,定位到 Arrays.asList 方法看一看。...,但是 add方法并没有具体实现,而是抛了异常出来,具体逻辑需要子类自己去实现。...坑之二 当你在 subList 操作时候,其实就是在操作原始 ArrayList,不明所以同学以为这是一个副本列表,然后在 subList 上一顿操作猛虎,最后回头一看原始 ArrayList

    41710

    塔荐 | 号称最快 Node.js 应用框架来了

    而国外两大巨头 —— 微软和亚马逊联合推出了一个深度学习库 3 Gluon:开源深度学习库 https://www.oschina.net/p/gluon ☞ 推荐理由:这是一个清晰、简洁、简单功能强大深度学习...身为开发者,除了追剧,我们还应该关注它们背后技术 —— 是什么在支撑着这些巨大流量?...作者通过 Go 语言绑定 Delphi VCL,使用 Delphi VCL 组件写了一个 UI 组件库。项目现已支持 VCL 标准控件大部分,足以满足日常操作。...2 riot: Go 语言实现分布式全文搜索引擎 https://www.oschina.net/p/riotsearch ☞ 推荐理由: 性能优异 —— 具有高效索引和搜索、支持中文分词、支持逻辑搜索以及中文转拼音搜索...开发者可以将遗留下来关系数据模型和灵活图形数据模型集成到一个数据库。 文章来源:开源中国 文章编辑:秦革

    2K100

    Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十二)Spring集成Redis缓存

    ,并整理在这篇文章,希望给看到教程朋友一些帮助。..."/> perfect-ssm项目中用到是此方法,本文中后续测试用例代码也是根据这种方式来测试,代码已经上传至github仓库,源码可以到我github仓库查看和下载。...RedisUtil 由于采用是第一种方式,在测试时候又写了一个Redis工具类,RedisUtil: /** * Created by 13 on 2017/12/4. */ @Component...} //删除 public void del(String key) { cache.evict(key); } } 整合测试 测试用例代码: 首先是简单...最后是项目中自定义JavaBean测试: 要缓存JavaBean必须实现Serializable接口,因为Spring会将对象先序列化再存入 Redis,测试用例com.ssm.promotion.core.entity.Article

    61540

    Java集合-List

    List每个元素都有一个索引,第一个元素索引是0,第二个元素索引是1。索引意思是“离List一个元素间隔多少个元素”。因为第一个元素在List开头,所有间隔为0。...只有在有充分理由情况下才应该省略泛型类型。...element 4"); 如果List已经包含元素,那么这些元素现在将在列表内部序列往后退一个序列,比如在插入新元素前索引是0,然后在0位置在插入一个元素,则原来元素索引为1。...subList()有两个参数:开始索引和结束索引,第一个索引是原List对应元素索引,第二个是结束索引,子集中包含起始索引不包括结束索引,和Stringsubstring()非常相似。...Comparator例子,实现只是简单比较了Carbrand属性,也可以再实现Comparator 比较number plates或者门数量noOfDoors属性, 同样可以使用Lambda表达式实现

    2.5K40

    一年经验Java开发0713面试

    当然了,还有其它一些分布式文件存储系统FastDFS,可以根据文件存储实际情况来进行选择。 文件存储有没有做备份? 目前是手动备份。 后面计划写一个自动备份脚本来每日备份。...先说说多线程是个什么: 要说线程,就得先讲,进程:进程可以简单理解为一个可以独立运行程序单位,它是线程集合,进程就是有一个或多个线程构成。...需要注意,使用sort方法时候: 要么 User类实现Comparable接口,并在类编写public int compareTo(T o)方法 public class User implements...具体来说,就是传入一个实现比较器接口匿名内部类。...6、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,: select id from t where num is null 可以在num上设置默认值

    70530

    高引用量并不靠谱!MIT开发科研「星探」识别「高影响力论文」

    MIT研究人员建立了一个「人工智能框架」——从发表过论文登出版物收集模式,通过学习,识别出对未来将会产生巨大影响技术,并发出「早期提醒」。...DELPHI表现怎么样呢? 在一次对其能力回顾试验DELPHI识别出了一个专家列表中所有具有开创性重大生物技术论文,有的论文仅仅发表了一年。...不过,DELPHI并没有局限在单一维度衡量标准,引用量来判断论文影响力,而是利用期刊文章元数据全时间序列网络,来揭示其在科学生态系统传播更高维度模式。...两篇论文引用量也许一样,高影响力论文会收获更多更深入关注,而影响力低论文就算在不断传播,并没有获得真正关注和利用。...然而,和所有的ML框架一样,框架设计者和使用者都应该警惕偏见,对此,Weis表示, 「我们需要不断意识到我们数据和模型潜在偏差。

    50240

    【QT】QT模型视图

    模型/视图编程 Qt模型/视图架构用来实现大量数据存储、处理及显示。...Qt提供了一些现成模型来处理数据项: QStringListModel存储简单QString项目列表; QStandardItemModel管理复杂属性结构数据项,每一个数据项可以包含任意数据;...模型索引QModeIIndex类提供对一块数据临时引用, 用来修改或检索模型数据,获取一个数据项模型索引必须指定模型3个属性:行号、列号和父项模型索引。...: QModelIndex index = model->index(row,column,parent); 也可以通过模型指定相关数据项对应模型索引以及特定角色来获取需要类型数据,: QVariant...QListView将数据项显示为一个列表;QTableView将模型数据显示在一个表格;QTreeView将模型数据项显示在具有层次列表

    3K20

    Delphi 语言「建议收藏」

    4、开发支持少 人说“聪明程序员用Delphi”,Delphi是入门容易修行难。Delphi做一些简单程序比较容易,但要做更专业程序,会很麻烦,学习曲线是前面平坦后面陡峭。...所以,估计,Embarcadero公司也很难卖到钱,他们想打盗版,盗版依然。 关于Embarcadero敲诈式营销到网上搜一下,帖子不少。...3、 调整价格策略,实现薄利多销。 4、 增加用户支持,开放技术资料,让更多人容易学习Delphi,增加对用户吸引力。...解释执行不容易发生内存泄露与内存错误,因为内存不再需要程序员去手动释放,程序编写更简单,语法也更加灵活,虽然效率可能会略低,当前趋势就是用CPU时间去换取更昂贵程序员时间,因为大部分程序对效率要求并不高...现在根本无法见到一个像样Delphi培训机构,企业在招聘Delphi程序员时候往往只是为了维护老旧项目。 这个时候如果有新手问“应该学习那种语言?”,“那种语言更容易就业?”。

    2.3K20

    Jdk14 都要出了,Jdk9 新特性还不了解一下?

    当然,这篇文章主要介绍 Java 9 新特性,而模块化是一个巨大改变,结合示例介绍下来篇幅会比较长,这里就不占用太多篇幅了。...模块化文章预告:如何编写一个模块化系统,如何打包让没有安装 Java 环境系统运行编写代码,都可以通过模块化选择运行时模块实现。...后面的文章就会通过一个模块化项目介绍到,有兴趣可以关注后续文章 ?。 2....people eat() 和 doXxx() 默认行为一致,使用私有方法可以方便抽取一个方法出来。...其他更新 Java 9 增加或者优化功能远不止这些,上面只是列举了常用一些新特性,更多新特性: 不能使用下划线 _ 作为变量名,因为它是一个关键字。

    51110

    白话面向智能体编程(Agent Oriented Programmig, AOP)之四

    OK, 闲话到此为止, 就让我们继续AOP白话之旅吧J 简单回顾一下前一段旅程(一,二,三), 在前面我们简要介绍了什么是Agent, 这个东东来由, 以及与其他重要概念, Object区别...之所以选择C#, 是看中他优雅和简洁(补充一句, 直到现在俺依然固执地认为Delphi是最优雅语言, 虽然Borland迫于生计不得不出售整个IDE部门, 俺依然决意守望Delphi, 直到Delphi...Ok, 这好比现实生活一个例子: 领导曰”上午10点让司机过来接去开会”....这应该是对Agent理论黑板模型一个最最简单实现: 有什么请求, 写到一个黑板上, 有能力响应这个请求, 就来处理, 并把这个请求从黑板上擦掉.  大家可以想像一下这种心智用场何在....这里不得不说明是, 假设Boss需要driver在达到之后通知他一下, 应该怎么实现呢? 由于OOP限制, 我们不得不使用一种相当不优雅方式: 回调函数, 来解决这个问题.

    1.1K100

    Java数据结构:从基础到高级应用

    以下是一个简单整数数组示例:int[] intArray = new int[5]; // 创建一个包含5个整数数组intArray[0] = 1;intArray[1] = 2;intArray[...列表(List)JavaList接口是一种有序数据结构,允许元素重复。常见List实现包括ArrayList和LinkedList。...图(Graph)图是一种复杂数据结构,用于表示各种关系和网络。在Java,通常需要自行实现数据结构或使用图算法库,例如JGraphT。...本文探讨了Java基础数据结构,包括数组、列表、集合和映射,以及高级数据结构堆栈、队列、树和图。我们还展示了这些数据结构在实际应用用例,包括搜索、排序、数据存储、图算法和性能优化。...希望这些示例代码和应用场景有助于您更好地理解和运用Java数据结构。正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    59951

    Java 泛型:理解和应用

    简单示例 泛型在 Java 主要作用就是创建类型通用集合类,我们创建一个容器类,然后通过三个示例来展示泛型使用: 没有使用泛型情况 使用 Object 类型作为容器对象 使用泛型作为容器对象...定义了一个简单元组类 Tuple,它有两个类型参数 T1 和 T2,以及相应 first 和 second 字段。...这也是为什么在泛型无法直接使用基本类型( int、boolean 等),而只能使用其包装类原因之一。 为什么要擦除 ?...stringList); // 编译错误 } 因此,当你需要编写能接受任何类型 List 代码时,应该使用 List<?...,所以只能使用包装类型 Integer,Double 等作为泛型类型参数 通配符使用可能会导致代码复杂: ?

    24431

    是什么能让 APP 快速精准定位到我们位置?

    在redis实现 我们日常生活遇到哪些定位场景 我们上下班经常会用APP打车和共享单车,下面2张图,应该都很熟悉,打开定位,查找我附近车,那么,这个是怎么实现呢?...脑海中第一个实现方式是:实时上报经纬度。...刚开始不理解到底怎么操作,后来经过一系列思考,可以如下操作: 偶数位放经度,奇数位放纬度 由于无法用文字表述,截了个操作图,如图上箭头操作顺序所示,就是把纬度往右移动一个位置,然后依次串起来。...28 25 28 3 6 6 20 15 31 5 22 25 用php实现也很简单: $stringList = "111001100111100000110011000110101000111111111001011011011001...在实际应用,我们就可以动态调整精度,实现更大或者更小范围内搜索,既能精准定位,又可以隐藏住一个地点具区位信息。

    1.6K30

    分享几种 Java8 通过 Stream 对列表进行去重方法

    参考链接: 如何在Java 8从Stream获取ArrayList 几种列表去重方法   在这里来分享几种列表去重方法,算是一次整理吧,如有纰漏,请不吝赐教。   1....Stream distinct()方法   distinct()是Java 8 Stream 提供方法,返回是由该流不同元素组成流。...distinct()使用 hashCode() 和 eqauls() 方法来获取不同元素。因此,需要去重类必须实现 hashCode() 和 equals() 方法。...{     // 这里第一种方法我们通过新创建一个只有不同元素列表来实现根据对象某个属性去重     ObjectMapper objectMapper = new ObjectMapper();    ...总结   以上便是要分享几种关于列表去重方法,当然这里没有进行更为详尽性能分析,希望以后会深入底层再重新分析一下。如有纰漏,还望不吝赐教。

    2.6K00

    Jdk14 都要出了,Jdk9 新特性还不了解一下?

    JDK 9 在 DEA (这里放错图了,微信不支持改图) 当然,这篇文章主要介绍 Java 9 新特性,而模块化是一个巨大改变,结合示例介绍下来篇幅会比较长,这里就不占用太多篇幅了。...模块化文章预告:如何编写一个模块化系统,如何打包让没有安装 Java 环境系统运行编写代码,都可以通过模块化选择运行时模块实现。...后面的文章就会通过一个模块化项目介绍到,有兴趣可以关注后续文章 ?。 2....people eat() 和 doXxx() 默认行为一致,使用私有方法可以方便抽取一个方法出来。...Set.of 随机遍历 7. 其他更新 Java 9 增加或者优化功能远不止这些,上面只是列举了常用一些新特性,更多新特性: 不能使用下划线 _ 作为变量名,因为它是一个关键字。

    54510

    Java Stream 操作这么多,其实只有两大类,看完这篇就清晰了

    当原始流元素开始迭代时,会调用 peek 方法中指定 Consumer 实现对元素进行处理。 正如 peek 操作名称含义一样,peek() 方法目的是查看流元素,而不是转换它们。...在上面的示例,使用是 Collectors.toList() 返回 Collector 实现。这个收集器把流所有元素收集到一个 List 中去。...min min() 方法返回 Stream 最小元素。哪个元素最小是由传递给 min() 方法 Comparator 接口实现来确定。...reduce()方法接收一个函数式接口 BinaryOperator 实现,它定义一个apply()方法,负责把上次累加结果和本次元素进行运算,并返回累加结果。...不过为了讲解这些操作用都是非常简单例子,流操作数据也都是简单类型,主要目的是让大家能更快速地理解 Stream 各种操作应用在数据上后,都有什么效果。

    25810
    领券