Thread overview
February 02, 2013

Yine değişik bir istekle karşınızdayım :)

Dizilerde shift ve pop kullanımlarını dile ekliyordum.
popu eklerken dizi.length-- şeklinde yapıyorum
ama shifti yapamadım bir türlü.

Dizilerin indekslerinin başlangıç adreslerini 4 arttırırsak bu işlemi yapabiliriz.

Peki ya bunu nasıl yapacağız?

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 02, 2013

Nerde kullanacaksın ya da buna ihtiyaç duyabileceğimiz bir örnek verebilir misin?

İkilik sistemde, bit'ler arası shift ve rotate gerekiyor da dizinin tüm elemanlarını taşımak gibi büyük külfete girecek algoritmamız, çok işlemci gücü harcayabilir. Elbette bunu geleneksel şekilde yapabiliriz ama dizi boyutu arttıkça tercih edilmeyen bir özellik olacaktır.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 02, 2013

Sanırım yanlış tabir ettim.

Alıntı:

>

Nerde kullanacaksın ya da buna ihtiyaç duyabileceğimiz bir örnek verebilir misin?

Rhodeus için kullanıyorum. Örnek gösterirsek

dizi = [1,2,3,4]
pop = dizi.pop // 4
shift = dizi.shift // 1
print(dizi) // [3,4]

bu işlemin yapılması için kullanmak istiyorum. Slice işlemi yaparsam vakit alacak isteğim bu işlemi mümkün olduğunca hızlı bir şekilde yapmak.

Şimdi dizinin başlangıç adresi 234534 olsun diyelim (rakamları çok fena salladım ama neyse :D)
erişilmek istenilen indeks * 4 + 234534 şeklinde indekse erişiliyor. Eğer 0.indeksi diziden atmak istersem 234538 yapmam yeterli oluyor bu sayede indekslemeye 1.indeksten itibaren başlanılıyor ve 0.indeks artık dizinin içinde olmamış oldu. Ayrıca dizi.length-- yaparakta dizi uzunluğunu kısalttıktan sonra işlem slice işlemi gerektirmeden yapılabilir ve hız anlamında ciddi bir kazanç elde edilebilir.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 02, 2013

Alıntı:

>

D'nin dilimlerinde bir yavaşlık yok ki zaten. Şu program da zaten dilimin ptr'ını arttırmaktan başka şey yapmaz:

void main(){
	auto dizi = [1,2,3,4];
	writeln(&dizi[0]);
	dizi = dizi[2..$];
	writeln(&dizi[0]);
	while(1){}
}

üstteki kodu yazdım da haklısınız evet boşu boşuna uğraşıyormuşum :) ama içimde kaldı bu ptryi nasıl arttıracağız?

Hatta demin bir benchmark testi yaptım ve sonucu beni şaşırttı.

dizi.length--

kullanımı

dizi = dizi[0..$-1]

kullanımından daha yavaş :)

D'nin slice mantığı gerçekten mükemmel bir şekilde tasarlanmış.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 02, 2013

D'nin dilimlerinde bir yavaşlık yok ki zaten. Şu program da zaten dilimin ptr'ını arttırmaktan başka şey yapmaz:

import std.stdio;

void shift(T : U[], U)(ref T dilim, size_t adım = 1)
{
   dilim = dilim[adım..$];
}

void main()
{
   auto dizi = [1,2,3,4];
   dizi.shift(2);
   writeln(dizi);
}

'-inline' olarak derleyince shift() işlev çağrısı da kalmıyor.

Ek bilgi olarak, yukarıdaki 'dizi' de aslında bir dilim.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]