【问题标题】:How do I insert items into a dictionary in Object Pascal?如何在 Object Pascal 中将项目插入字典?
【发布时间】:2021-04-06 14:14:55
【问题描述】:

我想在 Object Pascal 中将许多元素插入到字典中,而无需多次使用 .add() 方法,如下例所示:

//SOURCE FROM C++
    const map<string, Element> _Table = {
        
        { "H" , Element("Hydrogen",     1, 1.00784f)},
        { "He", Element("Helium",       2, 4.0026f)},
        { "Li", Element("Lithium",      3, 6.941f)}
    };

在 Object Pascal 中,我应该这样做以使用“传统”方法添加这 3 个元素:

  TElement := Element.Create;
  TElement.FullName := 'Hyrogen';
  TElement.AtomicNumber := 1;
  TElement.Weight := 1.00784;
  Table.Add('H', TElement);

  { and so on }

我想知道是否可以像在C++中那样在Obj Pascal中进行这种赋值

(对不起我的英语)

【问题讨论】:

  • TElement := Element.Create; 看起来非常错误。当然你的意思是Element := TElement.Create; 而不是其他Ts。
  • 无论如何,在不知道ElementTable的类型的情况下,我们不可能回答你Q。

标签: dictionary delphi pascal


【解决方案1】:

你可以为Element定义一个构造函数来简化它的创建,例如:

Table.Add('H', Element.Create('Hyrogen', 1, 1.00784));

要在创建TDictionary 期间将项目添加到它,您需要创建一个枚举TPair&lt;string, Element&gt; 项目集合的TEnumerable&lt;T&gt; 对象,然后您可以将该对象传递给TDictionary 构造函数。例如,TList&lt;T&gt; 派生自 TEnumerable&lt;T&gt;,例如:

type
  ElementPair = TPair<string, Element>;

List := TList<ElementPair>.Create;
List.Add(ElementPair.Create('H', Element.Create(...)));
...
Table := TDictionary<string, Element>.Create(List);
...

但是,创建TListTPairs 并不比直接调用TDictionary.Add() 好多少,除非您要创建一个列表1 次,然后重复使用它来创建多个字典。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-23
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多