AS 3.0 – İlişkisel Diziler

Actionscript 3.0Bana bir hafta kafayı yedirten durumu ve bulduğum çözümü paylaşmak istiyorum arkadaşlar. Actionscript 3.0 ile yazmaya başladığım yapay zeka projemde, yazılıma belirli bir kendi kendine düşünebilme becerisi kazandırmam gerekiyordu ve bunun için daha önce kullanmadığım kadar karmaşık bir şekilde iç içe fonksiyonlar çok sayıda gönderilen yada alından array değerleri kullandım.Program ilerledikçe anormal sonuçlar almaya başladım ve sorunun temeline indiğimde farklı dizilerin bir diğerine göre durduk yere değiştiğini farkettim, olayın kendisine direk sorun olarak yaklaştığım için çözümü bir türlü bulamadım ama e-posta ile sorunu ilettiğim İsmail Şimşek bu durum için bana bir sınıf önerdi ve olayı bu yönüyle araştırdığımda aslında bunun actionscript 3.0 ın kendi içindeki kurallardan biri olduğunu farkettim.

Yani bir diziyi diğerine atadığınızda iki dizi artık aynı bellek noktasını kullanıyordu ve birini değiştirdiğinizde diğeride otomatik olarak değişiyordu ve ne yazık ki actionscript bize pointerlarla oynamamıza da izin vermiyordu.

var dizi1:Array = new Array("a", "b", "c");
var dizi2:Array = dizi1; // Both array variables refer to the same array.
dizi2[0] = "z";
trace(dizi1); // Output: z,b,c.

Adobe yardım dökümanlarında da bu ayrıntıdan bahsediyordu. Bu bilgiyi temel aldığımda işime yarar bir çözüm getirdim; eşitlemek istediğim her dizinin elemanını tek tek diğerine atamaktı bu da. Bu eşitlemeyi kolaylaştıracak bir fonskiyon yazdığımda da çok fazla bir çaba harcamama gerek kalmadı. Herkese iyi çalışmalar…

 

var arr1:Array = new Array("a","b","c","d");
var arr2:Array = new Array("q","w","e","r");

arr2=cevir(arr1);

arr1[1]=”t”;
arr2[3]=”yyy”;

trace(arr1);
trace(arr2);

function cevir(gelenD:Array):Array
{
var cevapD:Array=new Array();
var dAdet:int=gelenD.length
for(var i:int=0; i {
cevapD[i]=gelenD[i];
}
return cevapD;
}

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedIn
Bir cevap verilmiş AS 3.0 – İlişkisel Diziler
  1. Oğuz Cevapla

    array1 = array2; ataması yaptığında aynı arraye point etmesi normal sanki, geçen gün konuştuğumuzda anlamamışım problemi 🙂 Bu arada İsmail biliyor bu işleri, doğru kapıya gitmişsin 🙂

Bir Cevap Yazın

Email adresiniz gösterilmeyecektir. Lütfen adınızı, email adresinizi ve yorumunuzu giriniz.