2010-11-01 36 views

Respuesta

42

probar esto

Const 
Elements =3; 
MyArray : array [1..Elements] of string = ('element 1','element 2','element 3'); 
+0

gracias, thow yo estaba saltando para evitar el uso de elementos y dejar que el cálculo de Delphi el tamaño de la matriz. – none

+4

Puede evitar la constante Elementos, pero debe declarar el tamaño de la matriz de todos modos. Puede usar la matriz "short form" [x] donde x es un tipo enumerado, creando una matriz desde el primero hasta el último elemento del tipo. El compilador no admite la matriz [] = (1,2,3) calculando el tamaño de la matriz y estableciendo un límite de 0..2 automáticamente. –

+0

Brillante, todo este tiempo pensé que esto no era posible: D –

14

Puede utilizar matrices dinámicas y probar este:

var 
    FMyArray: TArray<string>; 

function MyArray: TArray<string>; 
begin 
    if Length(FMyArray) = 0 then 
    FMyArray := TArray<string>.Create('One', 'Two', 'Three'); 
    Result := FMyArray; 
end; 

Si bien esto hace una inicialización en tiempo de ejecución de una matriz dinámica en el montón, se también muestra que Delphi admite un "pseudoconstructor" en matrices dinámicas que permiten la inicialización in situ. (NOTA: el código anterior no es seguro para subprocesos).

Ahora todo lo que necesita hacer para conocer la longitud de la matriz, es usar la función estándar Length(), o para encontrar el rango de índice permitido, use las funciones estándar Low() y High().

Si está utilizando una versión anterior de Delphi, reemplazar el tarray con su propia matriz dinámica tipo de cadena, tales como:

type 
    TStringArray = array of string; 
+0

cierto, eso es válido, sin embargo tiene que ser const y no tiempo de ejecución. – none

+0

Los elementos son constantes, solo la matriz no. Aparte de un costo de inicio, hay muy poca sobrecarga de tiempo de ejecución. ¿Tiene que ser const simplemente por tradición o hay algo específico para su caso que requiere const? –

+3

si la matriz no es const entonces la matriz podría cambiar. no se ajusta a los requisitos. la idea es agradable aunque. – none

32

En XE7 se puede declarar una constante de matriz dinámica de esta manera:

const 
    MyArray: TArray<String> = ['First','Second','Third']; 
+5

Esta es una característica ingeniosa. ¡Casi me dan ganas de actualizar! –

+0

Esto me salvó el día. Gracias. – Eduardo

0

Puede hacerlo de forma indirecta. Crear una función como:

procedure assignStringArray(var rasVelden: ArrayOfString; const asVeldenIn: Array Of String); 
var 
    iLengte, iT1: Integer; 
begin 
    iLengte := Length(asVeldenIn); 
    SetLength(rasVelden, iLengte); 
    for iT1 := iLengte-1 downto 0 do 
     rasVelden[iT1] := asVeldenIn[iT1]; 
end; 

y llamar a esta función como:

assignStringArray(asVelden, ['String1', 'String2', 'String3']); 

donde:

asVelden: ArrayOfString; 
Cuestiones relacionadas