Create a constant array of strings
Solution 1
try this
Const
Elements =3;
MyArray : array [1..Elements] of string = ('element 1','element 2','element 3');
Solution 2
In XE7 you can declare a dynamic array constant like this:
const
MyArray: TArray<String> = ['First','Second','Third'];
Solution 3
You can use dynamic arrays and try this:
var
FMyArray: TArray<string>;
function MyArray: TArray<string>;
begin
if Length(FMyArray) = 0 then
FMyArray := TArray<string>.Create('One', 'Two', 'Three');
Result := FMyArray;
end;
While this does do a run-time initialization of a dynamic array on the heap, it also shows that Delphi supports a "pseudo-constructor" on dynamic arrays that allow in-place initialization. (NOTE: the above code isn't thread-safe).
Now all you need to do to find out the length of the array, is use the Length() standard function, or to find the allowed index range, use the Low() and High() standard functions.
If you're using an older version of Delphi, replace the TArray with your own dynamic-array string type such as:
type
TStringArray = array of string;
Solution 4
You can do this in a indirect way. Create a function like:
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;
and call this function like:
assignStringArray(asVelden, ['String1', 'String2', 'String3']);
where:
asVelden: ArrayOfString;
Related videos on Youtube
none
Updated on April 02, 2020Comments
-
none about 4 years
Is there a way in Delphi declaring an array of strings such as following one?
{'first','second','third'}
-
none over 13 yearsthanks, thow i was hopping to avoid the use of Elements and let the Delphi calculate the size of the array.
-
none over 13 yearstrue, that is valid, however it needs to be const and not runtime.
-
Admin over 13 yearsYou can avoid the Elements constant, but you have to declare the array size anyway. You can use the "short form" array[x] where x is an enumerated type, creating an array from the first to the last element of the type. The compiler does not support array[] = (1,2,3) calculating the array size and setting a 0..2 boundary automatically.
-
Allen Bauer over 13 yearsThe elements are constant, only the array is not. Other than a startup cost, there is very little runtime overhead. Does it need to be const merely because of tradition or is there something specific to your case that requires const?
-
none over 13 yearsif the array is not const then the array could change. does not fit requirements. the idea is nice tho.
-
crazy_in_love over 9 yearsThis is a nifty feature. Almost make me want to upgrade!
-
Jerry Dodge over 9 yearsBrilliant, all this time I thought this wasn't possible :D
-
drakorg almost 7 yearsThis saved my day. Thanks.
-
tmjac2 about 6 yearsI love this. It allows you to do a forin loop (for S in MyArray do)
-
Marcus Mangelsdorf over 3 yearsPlease note that due to the compiler bug documented in RSP-21151 this currently doesn't work for class constants (fails with
E2086 Type 'TArray<T>' is not yet completely defined
), unless you add an additional:type TStringArray = TArray<string>;
to your unit. | (Note that it must be in a separatetype
section to prevent the bug and that the workaround doesn't seem to work for generic classes. See the ticket for all details.) -
Wolf over 2 yearsIt is indispensable to see such an array literal in action.