Existe-t-il un moyen, dans Delphi, de déclarer un tableau de chaînes tel que le suivant?Créer un tableau de chaînes de caractères constant
{'first','second','third'}
Existe-t-il un moyen, dans Delphi, de déclarer un tableau de chaînes tel que le suivant?Créer un tableau de chaînes de caractères constant
{'first','second','third'}
essayer cette
Const
Elements =3;
MyArray : array [1..Elements] of string = ('element 1','element 2','element 3');
Vous pouvez utiliser des tableaux dynamiques et essayez ceci:
var
FMyArray: TArray<string>;
function MyArray: TArray<string>;
begin
if Length(FMyArray) = 0 then
FMyArray := TArray<string>.Create('One', 'Two', 'Three');
Result := FMyArray;
end;
Bien que cela ne fait une initialisation d'exécution d'un tableau dynamique sur le tas, il montre également que Delphi supporte un "pseudo-constructeur" sur les tableaux dynamiques qui permettent l'initialisation sur place. (NOTE: le code ci-dessus n'est pas sûr pour les threads). Maintenant, tout ce que vous devez faire pour connaître la longueur de la matrice, utilisez la fonction standard Length() ou, pour trouver la plage d'index autorisée, utilisez les fonctions standard Low() et High().
Si vous utilisez une ancienne version de Delphi, remplacez le tarray avec votre propre type de chaîne de tableau dynamique tels que:
type
TStringArray = array of string;
vrai, c'est valide, mais il doit être const et pas d'exécution. – none
Les éléments sont constants, seul le tableau ne l'est pas. À part un coût de démarrage, il y a très peu de temps d'exécution. Est-ce que cela a besoin d'être const simplement à cause de la tradition ou y at-il quelque chose de spécifique à votre cas qui nécessite const? –
si le tableau n'est pas const alors le tableau pourrait changer. ne correspond pas aux exigences. l'idée est sympa tho. – none
En XE7 vous pouvez déclarer une constante de tableau dynamique comme ceci:
const
MyArray: TArray<String> = ['First','Second','Third'];
Ceci est une fonctionnalité astucieuse. Presque me donner envie de mettre à niveau! –
Cela a sauvé ma journée. Merci. – Eduardo
Vous pouvez le faire de manière indirecte. Créer une fonction comme:
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;
et appeler cette fonction comme:
assignStringArray(asVelden, ['String1', 'String2', 'String3']);
où:
asVelden: ArrayOfString;
merci, Thow i sautillait d'éviter l'utilisation des éléments et laisser calculer Delphi la taille du tableau. – none
Vous pouvez éviter la constante Elements, mais vous devez quand même déclarer la taille du tableau. Vous pouvez utiliser le tableau "short form" [x] où x est un type énuméré, créant un tableau du premier au dernier élément du type. Le compilateur ne prend pas en charge array [] = (1,2,3) calculant la taille du tableau et définissant une frontière 0..2 automatiquement. –
Brillant, tout ce temps je pensais que ce n'était pas possible: D –