【问题标题】:How to use FillChar to fill a 3D integer array (four bytes) in Delphi?Delphi中如何使用FillChar填充一个3D整数数组(四个字节)?
【发布时间】:2014-01-27 16:53:50
【问题描述】:

我知道这行得通:

type _AAAB = array of array of array of byte;

procedure fillArray(var arr: _AAAB; const v: byte); overload;
var
  i, j, k: integer;
begin
  for i := 0 to High(arr) do
  begin
    for j := 0 to High(arr[i]) do
    begin
      FillChar(arr[i][j][0], Length(arr[i][j]), v); // sizeof(byte)=1
    end;
  end;
end;

但是,如果数组是整数类型,4 字节,上面将无法按预期工作。我在这里要做的是加快以下速度:

type _AAAI = array of array of array of integer;

procedure fillArray(var arr: _AAAI; const v: integer); overload;
var
  i, j, k: integer;
begin
  for i := 0 to High(arr) do
  begin
    for j := 0 to High(arr[i]) do
    begin
      for k := 0 to High(arr[i][j]) do
      begin
        arr[i][j][k] := v;
      end;
    end;
  end;
end;

通过替换内部循环...有什么建议吗?有比 FillChar 更快的方法吗? FillChar 用字节填充,所以这里不好。

【问题讨论】:

  • 您要填充还是重置数组?
  • Matheus Freitas 用一个值填充数组。
  • 我认为这个问题实际上与 3-D 数组无关。您只是在问如何用大于一个字节的值填充数组。数组的额外维度无关紧要,不是吗?
  • 你怎么知道这是性能瓶颈?
  • 如果你使用 High(arr),你也应该(为了一致性)使用 Low(arr)。不要假设下限是 0 - 它可能是别的东西(在静态定义数组的情况下,例如 ARRAY[3..7] OF INTEGER)

标签: arrays delphi fillchar


【解决方案1】:

您可以使用multibyte analogue to FillChar, such as FillWord or FillDWord。如果您的环境尚未包含这些函数,您可能必须自己编写这些函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2011-02-28
    • 1970-01-01
    相关资源
    最近更新 更多