क्या डेल्फी में स्ट्रिंग्स की सरणी घोषित करने का कोई तरीका है जैसे कि निम्न एक?स्ट्रिंग्स की निरंतर सरणी बनाएं
{'first','second','third'}
क्या डेल्फी में स्ट्रिंग्स की सरणी घोषित करने का कोई तरीका है जैसे कि निम्न एक?स्ट्रिंग्स की निरंतर सरणी बनाएं
{'first','second','third'}
कोशिश इस
Const
Elements =3;
MyArray : array [1..Elements] of string = ('element 1','element 2','element 3');
आप गतिशील सरणियों का उपयोग करें और यह कोशिश कर सकते हैं:
var
FMyArray: TArray<string>;
function MyArray: TArray<string>;
begin
if Length(FMyArray) = 0 then
FMyArray := TArray<string>.Create('One', 'Two', 'Three');
Result := FMyArray;
end;
इस ढेर पर एक गतिशील सरणी के एक रन-टाइम प्रारंभ करता है, यह यह भी दिखाता है कि डेल्फी गतिशील सरणी पर "स्यूडो-कन्स्ट्रक्टर" का समर्थन करता है जो प्रारंभिक स्थान की अनुमति देता है। (नोट: उपरोक्त कोड थ्रेड-सुरक्षित नहीं है)।
अब आपको सरणी की लंबाई जानने के लिए क्या करना है, लंबाई() मानक फ़ंक्शन का उपयोग करें, या अनुमत अनुक्रमणिका सीमा को खोजने के लिए, निम्न() और उच्च() मानक फ़ंक्शंस का उपयोग करें।
आप डेल्फी के एक पुराने संस्करण का उपयोग कर रहे हैं, तो इस तरह के रूप में अपने गतिशील सरणी स्ट्रिंग प्रकार के साथ TArray बदल देते हैं:
type
TStringArray = array of string;
सच है, यह मान्य है, हालांकि इसे स्थिरांक और रनटाइम नहीं होना चाहिए। – none
तत्व स्थिर हैं, केवल सरणी नहीं है। स्टार्टअप लागत के अलावा, बहुत कम रनटाइम ओवरहेड होता है। क्या परंपरा की वजह से इसे केवल आधार की आवश्यकता है या क्या आपके मामले में कुछ विशिष्ट है जिसके लिए कॉन्स की आवश्यकता है? –
यदि सरणी नहीं है तो सरणी बदल सकती है। आवश्यकताओं को फिट नहीं करता है। विचार अच्छा था। – none
XE7 में आप इस तरह एक गतिशील सरणी लगातार घोषणा कर सकते हैं:
const
MyArray: TArray<String> = ['First','Second','Third'];
यह एक निफ्टी सुविधा है। लगभग मुझे अपग्रेड करना चाहते हैं! –
यह मेरा दिन बचाया। धन्यवाद। – Eduardo
आप इसे अप्रत्यक्ष तरीके से कर सकते हैं। की तरह एक समारोह बनाएँ: इस समारोह
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;
और कॉल की तरह:
assignStringArray(asVelden, ['String1', 'String2', 'String3']);
जहां:
asVelden: ArrayOfString;
धन्यवाद, thow मैं तत्वों के उपयोग से बचने और डेल्फी की गणना करते हैं करने के लिए किया गया था हॉपिंग सरणी का आकार। – none
आप एलिमेंट्स निरंतर से बच सकते हैं, लेकिन आपको सरणी आकार को वैसे भी घोषित करना होगा। आप "शॉर्ट फॉर्म" सरणी का उपयोग कर सकते हैं [x] जहां x एक समेकित प्रकार है, जो कि प्रकार के अंतिम तत्व से पहले से एक सरणी बना रहा है। कंपाइलर सरणी [] = (1,2,3) सरणी आकार की गणना और 0..2 सीमा स्वचालित रूप से सेट करने का समर्थन नहीं करता है। –
शानदार, इस बार मैंने सोचा कि यह संभव नहीं था: डी –