में लाइनों की एक सरणी में फ़ाइल को पढ़ें, लाइनों की सरणी में टेक्स्ट फ़ाइल को पढ़ने का सही तरीका क्या है?डी
string[] readLines(string filename) {
auto f = File(filename);
scope(exit) f.close();
string[] lines;
foreach (str; f.byLine) {
lines ~= str.idup;
}
return lines;
}
लेकिन जैसे कि यह एक सरणी प्रति पंक्ति का आकार परिवर्तन है, जो बहुत अक्षम है कर रहा है यह लग रहा है: मैं रोसेटा स्टोन पर निम्नलिखित पाया। मैं में पढ़ा लाइनों की संख्या का ट्रैक रखने और मानक दोहरीकरण विधि
int i = 0;
foreach (str; f.byLine) {
if (lines.length <= i + 1) {
lines.length = lines.length * 2 + 1;
}
lines[i] = str.idup;
i++;
}
lines.length = i;
के माध्यम से सरणी का आकार बदलने लेकिन यह है कि मुझे आश्चर्य है कि अगर मैं सिर्फ मानक पुस्तकालय में कुछ अनदेखी नहीं कर रहा हूँ है कि पर्याप्त बॉयलरप्लेट कोड है हो सकता है कि पहले से ही यह मेरे लिए करता है।
संपादित करें: fwend की टिप्पणी अधिक दृश्यता देने: this article विस्तार से बताया गया है कि सरणी संभाजक काम करता है, और क्यों appending
मैंने इसके माध्यम से पढ़ा, और सरणी –
में संलग्न होने पर आंतरिक आकार बदलने की रणनीति के बारे में कुछ भी नहीं कहा हाँ, मैं बस इसे देख रहा था, लेकिन मुझे पता है कि यह कैसे काम करता है। अधिक जानकारी के लिए, डी वास्तव में स्मृति के दो आकारों में स्मृति आवंटित करता है, इसलिए अगर सरणी 32 बाइट्स से बड़ी हो जाती है, तो यह 64 बाइट्स के एक हिस्से में फिर से आवंटित की जाएगी। – ricochet1k
ठीक है, धन्यवाद, –