2010-11-01 28 views
33

Delphi'de aşağıdaki gibi bir dizi dizeyi bildirmenin bir yolu var mı? Bu yığın dinamik dizinin bir çalışma zamanı başlatma yapar ikenSabit bir dizi dizgi oluşturma

var 
    FMyArray: TArray<string>; 

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

it:

{'first','second','third'} 

cevap

42

bu

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

sayesinde thow i Elements kullanımını önlemek ve Delphi hesaplamak izin attırmak dizinin boyutu. – none

+4

Elements sabitinden sakınabilirsiniz, ancak yine de dizi boyutunu bildirmelisiniz. "Kısa biçim" dizisini [x] kullanabilirsiniz. Burada x, numaralandırılmış bir türdür ve ilkinden son öğeye kadar bir dizi oluşturur. Derleyici, dizi boyutunu hesaplayan ve 0..2 bir sınır ayarlayan dizi [] = (1,2,3) dizisini desteklemez. –

+0

Parlak, tüm bu sefer bunun mümkün olmadığını düşündüm: D –

14

Dinamik diziler kullanabilir ve bu deneyebilirsiniz deneyin ayrıca Delphi'nin, yerinde başlatmaya izin veren dinamik dizilerde bir "sözde kurucu" özelliğini desteklediğini de gösterir. (NOT: yukarıdaki kod iplik güvenli değildir).

Artık dizinin uzunluğunu bulmak için yapmanız gereken tek şey, Length() standart işlevini kullanmak veya izin verilen dizin aralığını bulmak için Low() ve High() standart işlevlerini kullanın.

Delphi eski bir sürümünü kullanıyorsanız, örneğin Kendi dinamik dizi dize türüyle TArray değiştirin:

type 
    TStringArray = array of string; 
+0

true, geçerli, ancak const olması ve çalışma zamanı değil. – none

+0

Öğeler sabittir, yalnızca dizi değildir. Başlangıç ​​maliyetinin dışında, çok az çalışma zamanı yükü var. Sadece gelenek yüzünden kuruma mı ihtiyaç var yoksa davanızı gerektiren bir durum var mı? –

+3

dizisi const değilse, dizi değişebilir. gereksinimleri uymuyor. Bu fikir güzel. – none

32

XE7 olarak böyle bir dinamik dizi sabiti ilan edebilir:

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

Bu çekici bir özellik. Neredeyse yükseltme yapmak istiyorum! –

+0

Bu, günümü kurtardı. Teşekkürler. – Eduardo

0

Bunu dolaylı olarak yapabilirsiniz. gibi bir işlev oluşturun:

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; 

ve çağrı bu fonksiyon gibi:

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

burada:

asVelden: ArrayOfString; 
İlgili konular