C'è un modo in Delphi che dichiara una serie di stringhe come quella successiva?Creare una serie costante di stringhe
{'first','second','third'}
C'è un modo in Delphi che dichiara una serie di stringhe come quella successiva?Creare una serie costante di stringhe
{'first','second','third'}
provare questo
Const
Elements =3;
MyArray : array [1..Elements] of string = ('element 1','element 2','element 3');
È possibile utilizzare array dinamici e provare questo:
var
FMyArray: TArray<string>;
function MyArray: TArray<string>;
begin
if Length(FMyArray) = 0 then
FMyArray := TArray<string>.Create('One', 'Two', 'Three');
Result := FMyArray;
end;
Anche se questo fa fare un'inizializzazione di runtime di un array dinamico sul mucchio, si mostra anche che Delphi supporta uno "pseudo-costruttore" su array dinamici che consentono l'inizializzazione sul posto. (NOTA: il codice sopra non è thread-safe).
Ora tutto ciò che è necessario fare per scoprire la lunghezza dell'array, è utilizzare la funzione standard Length(), o per trovare l'intervallo di indice consentito, utilizzare le funzioni standard Low() e High().
Se stai usando una vecchia versione di Delphi, sostituire il tarray con il proprio dinamico-array di tipo stringa come:
type
TStringArray = array of string;
true, che è valido, tuttavia deve essere const e non runtime. – none
Gli elementi sono costanti, solo l'array non lo è. Oltre a un costo di avvio, il sovraccarico di runtime è molto ridotto. Ha bisogno di essere const semplicemente a causa della tradizione o c'è qualcosa di specifico nel tuo caso che richiede const? –
se la matrice non è const, la matrice potrebbe cambiare. non soddisfa i requisiti. l'idea è bella comunque. – none
In XE7 si può dichiarare una costante array dinamico come questo:
const
MyArray: TArray<String> = ['First','Second','Third'];
Questa è una caratteristica elegante. Quasi mi fanno venir voglia di aggiornare! –
Questo mi ha salvato la giornata. Grazie. – Eduardo
È possibile farlo in modo indiretto. Creare una funzione come:
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;
e chiamare questa funzione come:
assignStringArray(asVelden, ['String1', 'String2', 'String3']);
dove:
asVelden: ArrayOfString;
grazie, thow mi saltellava per evitare l'uso di elementi e lasciare che il calcolo Delphi la dimensione della matrice. – none
È possibile evitare la costante Elements, ma è comunque necessario dichiarare la dimensione dell'array. È possibile utilizzare la matrice "short form" [x] dove x è un tipo enumerato, creando una matrice dal primo all'ultimo elemento del tipo. Il compilatore non supporta array [] = (1,2,3) calcolando la dimensione dell'array e impostando automaticamente un limite di 0..2. –
Brillante, per tutto questo tempo ho pensato che non fosse possibile: D –