加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi – 声明矩阵const

发布时间:2020-12-15 09:07:56 所属栏目:大数据 来源:网络整理
导读:编辑我的问题. 我会具体的. 如何将下面的代码声明为const而不是var? (我无法获得Cube示例) var Matrix : array of array of string; SetLength(Matrix,8,8); Matrix[0,0]:='A0';Matrix[0,1]:='A1';Matrix[0,2]:='A2';Matrix[0,3]:='A3';Matrix[0,4]:='A4';M
编辑我的问题.

我会具体的.

如何将下面的代码声明为const而不是var?
(我无法获得Cube示例)

var
 Matrix : array of array of string;

 SetLength(Matrix,8,8);
 Matrix[0,0]:='A0';Matrix[0,1]:='A1';Matrix[0,2]:='A2';Matrix[0,3]:='A3';Matrix[0,4]:='A4';Matrix[0,5]:='A5';Matrix[0,6]:='A6';Matrix[0,7]:='A7';
 Matrix[1,0]:='B0';Matrix[1,1]:='B1';Matrix[1,2]:='B2';Matrix[1,3]:='B3';Matrix[1,4]:='B4';Matrix[1,5]:='B5';Matrix[1,6]:='B6';Matrix[1,7]:='B7';
 Matrix[2,0]:='C0';Matrix[2,1]:='C1';Matrix[2,2]:='C2';Matrix[2,3]:='C3';Matrix[2,4]:='C4';Matrix[2,5]:='C5';Matrix[2,6]:='C6';Matrix[2,7]:='C7';
 Matrix[3,0]:='D0';Matrix[3,1]:='D1';Matrix[3,2]:='D2';Matrix[3,3]:='D3';Matrix[3,4]:='D4';Matrix[3,5]:='D5';Matrix[3,6]:='D6';Matrix[3,7]:='D7';
 Matrix[4,0]:='E0';Matrix[4,1]:='E1';Matrix[4,2]:='E2';Matrix[4,3]:='E3';Matrix[4,4]:='E4';Matrix[4,5]:='E5';Matrix[4,6]:='E6';Matrix[4,7]:='E7';
 Matrix[5,0]:='F0';Matrix[5,1]:='F1';Matrix[5,2]:='F2';Matrix[5,3]:='F3';Matrix[5,4]:='F4';Matrix[5,5]:='F5';Matrix[5,6]:='F6';Matrix[5,7]:='F7';
 Matrix[6,0]:='G0';Matrix[6,1]:='G1';Matrix[6,2]:='G2';Matrix[6,3]:='G3';Matrix[6,4]:='G4';Matrix[6,5]:='G5';Matrix[6,6]:='G6';Matrix[6,7]:='G7';
 Matrix[7,0]:='H0';Matrix[7,1]:='H1';Matrix[7,2]:='H2';Matrix[7,3]:='H3';Matrix[7,4]:='H4';Matrix[7,5]:='H5';Matrix[7,6]:='H6';Matrix[7,7]:='H7';

解决方法

代码中的具体问题是您声明的数组是动态的.也就是说,边界不固定,可以在运行时更改.

在旧版本的Delphi(XE6及更早版本)中,根本不可能声明动态数组常量.在XE7及更高版本中,它是可能的,但语法与固定数组常量不同.

在所有版本中,如果声明具有指定(因此固定)边界的常量数组,则可以指定常量数组的内容:

const
  Matrix : array[0..7,0..7] of String = 
   (
    ('A0','A1','A2','A3','A4','A5','A6','A7'),('B0','B1','B2','B3','B4','B5','B6','B7'),('C0','C1','C2','C3','C4','C5','C6','C7'),('D0','D1','D2','D3','D4','D5','D6','D7'),('E0','E1','E2','E3','E4','E5','E6','E7'),('F0','F1','F2','F3','F4','F5','F6','F7'),('G0','G1','G2','G3','G4','G5','G6','G7'),('H0','H1','H2','H3','H4','H5','H6','H7')
   );

如果您的数组需要在早于XE6的Delphi版本中是动态的,那么您不能使用这样的声明来初始化这样的数组.

如果您使用的是Delphi XE7或更高版本,则可以使用备用语法声明动态数组常量.这与固定数组常量的语法非常相似,但使用方括号[]而不是常规括号():

const
   Matrix : array of array of String =
   [
    ['A0','A7'],['B0','B7'],['C0','C7'],['D0','D7'],['E0','E7'],['F0','F7'],['G0','G7'],['H0','H7']
   ];

旧版Delphi版本的混合解决方案

如果您使用的是较旧版本的Delphi,那么即使使用动态数组,如果您有一些初始状态(边界和内容),您希望将其初始化,那么您可以使用固定数组常量来定义该初始状态,然后从该常量在运行时初始化动态数组,如:

const
  MX_DIM  = 8;
  MX_DEFAULT : array[0..MX_DIM - 1,0..MX_DIM - 1] of String =
   (
    ('A0','H7')
   );

// Then in your code:

var
  x,y: Integer;
  Matrix: array of array of String;
begin
  // Initialise 'Matrix' from MX_DEFAULT:

  SetLength(Matrix,MX_DIM,MX_DIM);
  for x := 0 to Pred(MX_DIM) do
    for y := 0 to Pred(MX_DIM) do
      Matrix[x,y] := MX_DEFAULT[x,y];
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读