Yaklaşık 30 iletinden sonra...
Artık konunun cevabını vereyim. Belki gelecekte birileri araştırdığında işine yarayacak. Ancak bu Zekeriya'nın tam olarak istediği değil sanırım. Öyle değil mi?
Maalesef farklı türler konusunda çok zorlandım. Belki önceki sayfada verdiğim çözüm ile tek tür (string) olarak ekrana yazabiliyoruz ama bunlar yönetmede (data management) başarılı olamadım. Belki de format() işlevi yerine bir şey koyarsak olabilir. Çünkü ekrana yansıyan veriler onun gözetmenliğinde geçiyordu. Neyse soruya gelelim:
Dizi içinde dizi kullanımı nasıl?
class içİçeDizi(T) {
union {
T x; // tek değerli herhangi bir tür
T[] y; // tek boyutlu herhangi bir tür
T[][] z; // iki boyutlu herhangi bir tür
}
T opIndex(T t) {
x = t;
return x;
}
T[] opIndex(T[] t...) {
y = t;
return y;
}
T[][] opIndex(T[][] t...) {
z = t;
return z;
}
}
import std.stdio;
alias size_t Tür;
void main() {
içİçeDizi!Tür[3] dizi = new içİçeDizi!Tür; {
"[".write;
dizi[0][1].write(", ");
dizi[1][1, 2].write(", ");
dizi[2][[1, 2, 3], [3, 2, 1]].writeln("]");
}
}// Çıktısı: [1, [1, 2], [[1, 2, 3], [3, 2, 1]]]
Dediğim gibi, yukarıdaki koddan da anlaşılacak; aynı dizide farklı türler konusunda başarılı olamıyoruz. Belki bu konu OOP'un da üzerinde çünkü programlama dünyasının gerçekleri (türler ve birbirine dönüşümler!) yüzünden kısıtlanıyoruz. Elbette Python'da bir programlama dili ama zannedersem her şeyi tek bir tür olarak niteliyor. Bu ise yüksek bellek ihtiyacı ve yavaşlık olarak bizden bazı bedeller almasına neden oluyor.
Başka çözümü olan var mı?
**
Dip Not:** '[1, [1, 2], [[1, 2, 3], [3, 2, 1]]]' böyle bir sonucu elbette çok boyutlu bir diziyle alabilirdik ama her elemanın bellekte kaplayacağı alan en büyük elemanın içindeki dizinin elemanları kadar olacaktı.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]