【问题标题】:Delphi - Converting an array of type to an array of string [closed]Delphi - 将类型数组转换为字符串数组[关闭]
【发布时间】:2014-01-29 09:01:14
【问题描述】:

我目前在 Delphi 中编程,需要将数组“BookArray:TBook 数组”转换为 BookArray2:字符串数组。 是否有函数或无论如何将类型数组转换为字符串数组?

谢谢,乔治。

【问题讨论】:

  • 我们不知道TBook 是什么,所以我们无法回答。此外,您必须定义此“转换”实际上应该做什么。 (最后,我不知道什么是“类型数组”……)
  • 是的,请提供您的自定义 TBook 类型的声明。

标签: arrays string delphi types


【解决方案1】:

您需要一个将您的类型转换为字符串的函数。让我们假设它是这样存在的:

function BookToString(const Book: TBook): string;

然后将函数应用于数组的每个元素:

function BookArrayToString(const Books: array of TBook): TArray<string>;
var
  i: Integer;
begin
  SetLength(Result, Length(Books));
  for i := 0 to high(Books) do
    Result[i] := BookToString(Books[i]);
end;

【讨论】:

    【解决方案2】:

    没有标准功能可以做到这一点。您需要逐步检查您的 tbook 数组并将其中的内容转换为字符串并将其放入字符串数组中。

    SetLength(BookArray2, length(BookArray))
    for i := 0 to High(BookArray) do begin
      BookArray2[i] := BookArray[i].Author + ' ' + BookArray[i].Title + ' ' + IntToStr(BookArray[i].Edition);
    end;
    

    【讨论】:

    • 嗯。 SetLength 应该在循环之外。
    • @Pieter - “没有标准功能”,但有!对于类,它是 .ToString 方法:BookArray2[i] := BookArray[i].ToString();docwiki.embarcadero.com/Libraries/XE5/en/…,对于 recotds,它是 Operator Implisit:BookArray2[i] := BookArray[i];docwiki.embarcadero.com/RADStudio/XE3/en/… // 实现应该由 topicstarter 提供,但至少首选的名称/转换方法是设置
    • @DavidHeffernan 为什么要在循环外使用 setlength?
    • 因为您在循环开始之前就知道数组的最终大小。所以你可以分配一次。因此避免了对堆分配的昂贵调用,并避免了地址空间的碎片化。
    • 还 pred(Length(...)) 应该高(...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多