gpt4 book ai didi

arrays - 有什么有效的方法可以将 TArray 转换为 TStringDynArray?

转载 作者:行者123 更新时间:2023-12-03 15:05:10 25 4
gpt4 key购买 nike

我的代码的很大一部分( delphi-dutil 等)使用 TStringDynArray 。现在我想将所有键转换为 TDictionary<string, string>TStringDynArray 。不幸的是我只找到了TDictionary.Keys.ToArray ,即TArray<T>

我知道我可以编写一个简单的复制函数来进行原始内容复制,但我的 TStringDynArray通常非常大(大约 10000 个条目),所以我正在寻找一种有效的方法来转换 TArray<string>TStringDynArray .

function ConvertToStringDynArray(const A: TArray<string>): TStringDynArray;
var
I: Integer;
begin
assert(A <> nil);
SetLength(Result, Length(A));
for I := 0 to Length(A) - 1 do
Result[I] := A[I];
end;

最佳答案

最好的解决方案是将代码库中的所有动态数组转换为 TArray<T> 。这是最好的,因为泛型类型的类型兼容性规则不太严格。因此,我建议您考虑在代码库中采取此步骤。

但是,这仅在您控制的代码中可行。当与无法修改的代码和库交互时,就会遇到问题。

从根本上来说,所有这些类型都是动态数组,并且共享一个通用的实现。这意味着障碍是在语言层面而不是实现层面。因此可以安全地使用强制转换来使编译器接受您的分配。

var
DynArr: TStringDynArray;
GenericArr: TArray<string>;
....
DynArr := TStringDynArray(GenericArr);
GenericArr := TArray<string>(DynArr);

您可以在函数调用参数中使用这些转换。

因为您正在抑制类型检查,所以您确实不想将这些强制转换分散在代码中。将它们集中到辅助函数中。例如:

function StringDynArray(const arr: TArray<string>): TStringDynArray;
begin
Result := TStringDynArray(arr);
end;

最后一条评论:这个相关问题可能会引起兴趣:Is it safe to type-cast TArray<X> to array of X?

关于arrays - 有什么有效的方法可以将 TArray<string> 转换为 TStringDynArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com