Çok boyutlu dizi oluşturmak D'de çok kolay:
/* 4 satıra 5 sütunluk bir dizi */
auto alan = new int[][](4, 5);
C'de olsa, en dıştaki düzey dışındakilerin teker teker malloc'la oluşturulmaları gerekir. (Aslında tek malloc'la da halledilebilir; ama o, dizinin satırlarının uzunluklarının değişmeyeceği durumlarda kullanışlıdır.) C++'da std::vector büyük kolaylık getirir aslında.
Aşağıdaki de üç boyutlu dizi kullanan bir program. Yalnızca ilk satırı bizi ilgilendiriyor; gerisi diziyi yazdıran kodlar:
import std.stdio;
import std.string;
import std.conv;
void main()
{
/* 3 düzlem, 4 satır, ve 5 sütundan oluşan dizi */
auto dizi = new int[][][](3, 4, 5);
/* Burada içini doldurduğumuzu varsayalım; örnek: */
dizi[2][2][2] = 1;
/* Bundan sonrası güzel olarak göstermek için */
foreach (düzlemNumarası, düzlem; dizi) {
foreach (satırNumarası, satır; düzlem) {
write(satırBaşı(düzlemNumarası, satırNumarası));
foreach (sütun; satır) {
write(sütun, ' ');
}
writeln();
}
writeln();
}
}
string satırBaşı(int düzlemNumarası, int satırNumarası)
{
string girinti = repeat(" ", 2 * düzlemNumarası);
/* Yalnızca ilk satıra yazalım */
string düzlemBilgisi = (satırNumarası == 0
?
"d" ~ to!string(düzlemNumarası) ~ " "
: " ");
return girinti ~ düzlemBilgisi ~ " ";
}
Çıktısı:
'd0 0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
d1 0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
d2 0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
'
'd', düzlem numarasını bildiriyor. (Aslında düzlem yerine derinlik demek daha doğru herhalde.)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply