arrays - Delphi 10.2.3中的Setlength用于类似数组的类型

标签 arrays delphi

尽管我发现了一些与主题长度设置有关的帖子,但找不到解决方案:

使用下面的代码-这是一个更大的程序的一部分-

type TVektor2=array[20] of extended;
      TElement2=array[20] of String;

Procedure Sort_Shell2(
 element1X: TElement2; zahlX: TVektor2; var Element2X : TElement2;
 var zahl2X : TVektor2);
var
  bis, i, j, k, min : LongInt;    l, laenge  : single;
  h,s,w,h1,h2, ElemX: string;
  e : array[20] of String;  
begin
laenge := 5;   // just an example 

SetLength(Element1X, 3); /// Error 
 //DynArraySetlength(e,l,1); /// how?

  bis := High(e);
  k := bis shr 1;// div 2
  while (k > 0) do
  begin
    for i := 0 to (bis - k) do
    begin
      j := i;
      h1 := e[j];     //I use this because before I had an Acces violation
      h2 := e[j + k]; // using directly e[j] := e[j+k]; 
      while (j >= 0) and (h1 > h2) do
      begin
        h := h1;
         l:=zahlx[j]; //str(l:5:3,S);showmessage(h + s);
        e[j] :=e[j + k];
        zahlx[j] := zahlx[j+ k];
        e[j + k] := h;
        zahlx[j+ k]:=l;
        if j > k then
          Dec(j, k)
        else
          j := 0;
      end; // {end while]
    end; // { end for}
    k := k shr 1; // div 2
  end;  // {end while}
   Element2x:=e;  zahl2x :=zahlx;
  end;


如果尝试这样的setlength命令,则会收到错误“不兼容的类型”。
我尝试使用for next loop-将属性分配给静态数组的每个位置(具有20个条目)或对应的动态数组,然后使用setlength。
但这没有用。是否可以将TElement2转换为数组? (因为它已经是一个数组!)

为什么不能使用简单的字符串= a的静态数组[1..20],为每个位置设置a [i] = TElement2 [i],然后使用setlength(a,5)?

如果我使用DynArraySetLength(Pointer,typeInfo,dimCnt,lengthVec),这些变量必须使用什么?
我对指针几乎一无所知,对于这样的问题我也不知道,为了从给定的TElement2数组开始的给定长度的数组,我必须使用哪些参数。顺便说一句,一般来说,使用动态数组是个好主意吗?

顺便说一句,该排序例程中也可能会出现错误,因为它无法正常工作...

谁能帮我?

最佳答案

为了在Delphi中使用动态数组,您必须声明一个这样的数组:

TElement2=array of String; 


而不是TElement2=array[20] of StringTElement2=array[1..20] of String;

如果以这种方式声明TElement2,则SetLength(element1X, 3);将起作用。

此外,当您在代码底部分配时

Element2x:=e;


除非两个变量的声明类型都不相同,否则它将不会编译:

e : TElement2;

关于arrays - Delphi 10.2.3中的Setlength用于类似数组的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51498985/

相关文章:

java - 将 ArrayList 折叠为单个整数

delphi - Delphi 中的外部异常 EEFFACE

delphi - 如何打印到 C++Builder 输出窗口

rest - Delphi RESTClient POST 请求

delphi - 从ini文件加载png图像的问题

c++ - 使用递归对数组进行排序

c - 使用指针访问带有数组的两个结构

php - 将具有不同名称的动态输入字段数组项值传递给 php

jquery - 使用 jQuery .each() 解析 JSON 数组

delphi - 键盘 Hook 过程的问题