Merhaba,
Bu konu ya öyle hızlıca kapanmayacak (çünkü benim az önce netleştirdiğim şeyler var) ya da neredeyse tüm olasılıklara bakarak zaten kapatmak üzereyiz. Çıkış noktamız new operatörü ile kurulma tekniklerini anlatan şu sayfa:
https://dlang.org/spec/expression#new_multidimensional
Ancak dikkat, burada çok boyutlu diziler (Multidimensional Arrays) olarak nitelendirilen diziler dizisi, aşağıdaki spec'te, dikdörtgen diziler (Rectangular Arrays) olarak başlıklanırken daha çok işaretçilerin böldüğü (array of pointers to array) nitelendirilmiş...
https://dlang.org/spec/arrays.html#rectangular-arrays
Konu FORTRAN'dan başlayıp tırtıklı (jagged) diyebileceğimiz türde dizilere (hoş, aşağıdaki örneklerde bunu yapabilirdik) kadar uzuyor:
https://wiki.dlang.org/Dense_multidimensional_arrays
Buradaki konu başlığı her ne kadar statik diziler olsa da şu örneklerin biri (B maddesindeki 2 örnek) dışında her şey dinamik. O dizi sonuna (statik ve [2] birimlik olmak kaydıyla) ekleme bile yapabiliyorsunuz:
void printArray(Multi)(ref Multi arr)
{
arr.writefln!"%-(%-(%12s %)\n%)";
foreach(ref row; arr) {
foreach(ref column; row) {
write(&column, " ");
}
writeln;
}
}
/* KISALTMALAR:
=============
- tür: tüm testin yapıldığı değişken (type)
- sat: ilk baytın yerleştiği kısım (row)
- süt: kaç adet (kısım x n) olacak (column)
Açıklama: Kısım, aslında dizi ve tür.sizeof'dan
sonra gelen en küçük birim. Çok boyutlu dizi ise
dizi dizisi, yani en büyük birim.
*/
void main()
{
alias tür = ubyte;
// A- 2 sat, 3 süt parantezli kurulum:
auto satSüt = new tür[][](2, 3);
satSüt[0][] = tür(1); // ilk satır 1 x 3
satSüt[0].length = 4; /* dikkat: İlk kısım
genişletilebiliyor! */
satSüt.printArray;
typeid(satSüt).writeln; // ubyte[][]
// B- öncekinin tersi sıralanan kurulum:
auto sütSat = new tür[2][3];
sütSat ~= [4, 4]; /* dikkat: dikey genişler
ve statik dizilerin dizisidir */
sütSat.printArray;
typeid(sütSat).writeln; // ubyte[2][]
// C- Bu da aslında A'nın eşdeğeri (küçük a):
auto a = new tür[][2];
foreach(ref b; a)
{
b = new tür[3];
}
a.printArray;
typeid(a).writeln;
Örneklerde işaretçilerin adrelerini ve içeriğini görebiliyorsunuz. Bunu bize sağlayan printArray()
ve her şeyi değiştirerek istediğiniz gibi emin olmanız mümkün. O yüzden ben çok şey yazıp uzatmayacağım. Ancak dikkat çeken özellikle 2. örnek yani kısmen statik daha çok statik dizilerin dizisi, yanılıyor olabilir miyim?
On Saturday, 11 June 2022 at 16:26:18 UTC, Ali Çehreli wrote:
> Ben o tersten okuma konusunu anlamıyorum. Bir sonraki toplantıda konuşalım.
Yukarda verdiğim 2. adresin 3. notunda "opposite orders" yazıyor. Acaba konuştuğumuz şey bu mu?
Teşekkürler...