数组从Delphi 5.0 Pascal中的0或1开始?

oka*_*ami 10 arrays delphi pascal

我想在Delphi 5.0中做一个ArrayList.所以我找到了这个代码的解决方案:

var arr: array of String;
Run Code Online (Sandbox Code Playgroud)

好的,但每次我添加的东西我都这样做:

var
    Form1: TForm1;
    var arr : array of String;

procedure TForm1.Button1Click(Sender: TObject);
var aux :string;
var len:integer;
begin
    len := Length(arr) + 1;
    SetLength(arr, len);
    arr[len-1] := 'abc' + IntToStr(len);
    Button1.Caption := arr[len-1]; // just to writeout something
end;
Run Code Online (Sandbox Code Playgroud)

我是一名C++程序员,我对Pascal一无所知.我总是听说Pascal索引从1开始,而不是0.在上面的过程中我做arr [len-1]因为0索引开始.

有没有比Pascal数组更好的方法?和C++一样std::vector吗?

Tri*_*dad 38

动态数组的索引从零开始

var
  a: array of Integer;
begin
  SetLength(a, 500);
  a[0] := 0;
Run Code Online (Sandbox Code Playgroud)

静态数组可以有任意索引

var
  i: Integer;
  b: array [50..100] of Integer;
  c: array[-10..10] of Integer; 
begin
  for i := 50 to 100 do b[i] := i * i;

  // Note negative starting index above in declaration
  for i := -10 to 10 do c[i] := i * i;
Run Code Online (Sandbox Code Playgroud)

字符串的索引以一个开头

var
  c: String;
begin
  c := 'Zap!';
  c[1] := 'W';
  ShowMessage(c); /// shows 'Wap!'
Run Code Online (Sandbox Code Playgroud)

无论如何,您总是可以使用Low()和High()函数来返回数组的较低和较高索引.

对于处理字符串列表,最常用的类是TStringList,它位于单元类中.

  • + jachguate当问题是关于"Delphi 5.0 Pascal"时,为什么这个答案已经过时了?:-) (8认同)
  • 我没有使用Pascal很长一段时间,但如果内存服务良好,字符串索引从1开始的原因是因为第一个元素是字符串长度,你可以直接编辑来改变长度 (3认同)

jac*_*ate 12

你正在使用的是一个动态数组,它与Pascal经典数组不同.动态数组的大小可变,索引基于0.

经典的Pascal数组不是0也不是1 ......这取决于索引开始或结束的程序员.唯一的编译器限制是索引必须是序数类型.你可以申报

procedure x;
    var
        IntArr: array[50..75] of Integer;
        StrArr: array[0..49] of string;
        DblArr: array[1..10] of Double;
Run Code Online (Sandbox Code Playgroud)

  • 也许您可以添加一个带有枚举类型索引的数组,例如`array [TAlign] of ...`。 (2认同)
  • ...甚至`数组[boolean] of string =('False','True');` (2认同)

小智 6

Delphi Pascal还有一个很好的功能,可以帮助迭代任何维度的数组:

简单地使用对于i:= Low(Array) to High(Array) do.... 起始偏移完全透明,即0,1或5或其他.