Jaki jest właściwy sposób odczytu pliku tekstowego do tablicy linii? Znalazłem następujące na Rosetta Stone:odczytać plik z tablicy linii w d
string[] readLines(string filename) {
auto f = File(filename);
scope(exit) f.close();
string[] lines;
foreach (str; f.byLine) {
lines ~= str.idup;
}
return lines;
}
ale wygląda na to, że robi jedną macierz rozmiaru na wiersz, który jest bardzo nieefektywne. Mogę śledzić liczby linii odczytać i zmienić rozmiar tablicy poprzez standardową metodą podwojenia
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;
ale to wystarczy kod boilerplate że muszę się zastanawiać, czy nie jestem tylko wychodzi coś w standardowej biblioteki już to robi dla mnie.
Edit: podając komentarz lepszą widoczność fwend za: this article opisuje szczegółowo jak działa tablica podzielnika i dlaczego Dołączanie jest dobrze obsługiwane przez środowisko wykonawcze
Przeczytałem to i nie powiedziałem nic o wewnętrznej strategii zmiany rozmiaru przy dołączaniu do tablicy –
Tak, właśnie to zauważyłem, ale wiem, że to działa. Aby uzyskać więcej szczegółów, D faktycznie przydziela pamięć w porcjach o potędze-dwóch rozmiarach, więc jeśli tablica będzie większa niż, powiedzmy, 32 bajty, wówczas ponownie przydzieli do porcji o wielkości 64 bajtów. – ricochet1k
dobra, dziękuję, dobrze wiedzieć. –