July 13, 2012

Ah! Tabii benim yöntem yalnızca ilk bulduğunu siliyor.

Ali

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

July 13, 2012

Uyarı için teşekkürler. ama aslında remove()'da hata yok çünkü davranışını öyle belgelemişler: Uyan eleman buldukça son taraftaki elemanları onun üstüne kaydırıyor. Yani asıl aralığın uzunluğunda değişiklik yapmıyor.

Pek kullanışlı değil... :/

Ali

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

July 13, 2012

Alıntı (Salih Dinçer):

>

Diziyi, işleve 'ref' takısı ile uygulamadığımız halde cümle dizisine yan etkisi varmış!

Dilimlerle ilgili olarak en çok dikkat edilmesi gereken konu o zaten. Dışardaki ve içerdeki dilimler aynı elemanlara eriştirmeye devam ediyorlar.

Ali

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

July 13, 2012

Alıntı (Salih Dinçer):

>

cümlelerin üçünün de farklı anlamı var

Güzelmiş. :)

Ali

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

July 14, 2012

Gerçi Zafer bizi aydınlatacaktır ama sorabilir miyim; bildiğimiz basit bir dizide (sanırım vector list diyorlar) doğrudan içeriğe göre silme işlemi C#'da nasıl oluyor? Hatırladığım kadarıyla ArrayList de oluyordu ve bu çağrışımsal (associative) dizilere benzer bir şey...

Bakınız şimdi şöyle bir kod buldum:

           ArrayList myArr = new ArrayList();

           myArr.Add("one");
           myArr.Add("two");
           myArr.Add("three");

           Console.WriteLine("Before deletion:");
           ShowArray(myArr);

           myArr.Remove("three");
           ShowArray(myArr);

Aslında düşünüyorum da kendimiz ArrayList isminde bir sınıf oluşturup üyesini de 'int'[string] yapıp bu yapının .remove özelliğini keys ismini doğrudan vererek kullanabiliriz. Tabi sıralamalar hash algoritmasından dolayı değişecektir ama sıralı listeletmek istersek kendimiz .sort diye bir özellik yazabilmemiz de mümkün.

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

July 14, 2012

Alıntı (Salih Dinçer):

>

Gerçi Zafer bizi aydınlatacaktır ama sorabilir miyim;

Ali'nin her zamanki gibi değerli katkıları ve Salih'in güzel incelemelerinin yanında Kadir ve Hüseyin'in değerli mesajları ile ilerleyen bu konuyu büyük bir keyifle takip ediyorum. İşlerin yoğunluğu ve D dili ile ilgili başka bir alanda tüm zamanımı harcadığım için çok katılamasamda mesajları sürekli takip ediyorum.

Konuya dönersek, Salih seninde örneklediğin gibi C# ile ArrayList yapısından faydalanılabilir. ArrayList .Net'in ilk versiyonlarında gelen bir özellik daha çok dizi mantığına uygun. Bir ArrayList tanımlayıp tipi önemli olmadan veri ekleyebilirsiniz. ArrayList arka planda object tipini kullandığı için bize böyle bir imkan sağlıyor. Dezavantajı ise ArrayListten aldığınız her eleman için tip dönüşümü (http://onursalkaya.blogspot.com/2011/10/c-boxing-ve-unboxing.html) yapmak gerekir ki bu işlem maliyetlidir.

Neyse konu daha uzun tabi, yeride burası değil tabi, ilgilenenler için deginmek istedim. Ama belki böyle bir topluluk yazılabilir veya D'nin SList yapısını incemekte fayda var. Yinede en güzeli küçük bir metotla işi çözmek sanırım ;)

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

July 14, 2012

Alıntı:

>

Yinede en güzeli küçük bir metotla işi çözmek sanırım ;)

Evet en güzeli küçük bir metodla işi çözmek kurcalarsak iş büyüyecek ve üzerinde tartişmaktan başka birşeyler yapaya fırsat kalmayacak :)

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

July 14, 2012

Teşekkürler Zafer, sanırım bahsettiğin SList olayı daha önce Şablonlar ile ilgili başlıkta verdiğin ve bunu aşağıya alıntıladığım olmalı? Gerçi benim asıl merak ettiğim; gerek C# olsun gerekse D, verdiği olanaklar ne kadar hızlı? Ayrıca C#'da remove ile dizi taşıyıcısından eleman çıkarıldığında aynı içerikteki tümünü (tıpkı önceki sayfada keşfettiğimiz gibi) siliyor mu?

Alıntı (zafer:1341574190):

>

Alıntı (Salih Dinçer):

>

Öyle bir şey yapmalı ki stack yine dolduğunda bir event oluşsun ve yeni thread'lar meydana gelsin.

Salih, anladığım kadarıyla bazı işlerin dinamik olarak yapılmasını istiyorsun. Dinamik olarak yeni diziler oluşturup bunları rastgele dolduran ve bir listeye ekleyen bir kod hazırladım. Belki bir yardımı olur diye düşünüyorum. Senin belirttigin gibi her dizi dolduğunda yeni bir dizi hazırlanıp onun üzerinde çalışılıyor.

> import std.stdio;
> import std.random;
> import std.container;
>
> void main()
> {
>     SList!(int[]) diziListe;
>
>     for (int i = 0; i < 100; ++i)
>     {
>         // Benim için yeni bir dizi hazırla
>         // int tipinde ve 5 elemanlı olsun
>         int[] dizi = new int[5];
>
>         // Yeni diziye değerleri doldur.
>         for (int j = 0; j < 5; ++j)
>         {
>             dizi[j] = uniform(0, 100);
>         }
>
>         // Dolu diziyi kaybetmemek için
>         // listeye ekle
>         diziListe.insert(dizi);
>     }
>
>     // Listeyi yazalım, bakalım neler varmış.
>     foreach (dizi; diziListe)
>     {
>         writefln("-> %s", dizi);
>     }
> }
> ```

>

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

Ayrıca alıntılamalıyım; Ali hocamı yazmaya (onu tekrar ettirmeye) zorunda bırakmadan:

Alıntı (acehreli:1329860299):

>
> import std.stdio;
> import std.container;
>
> void main()
> {
>     auto primes = new SList!int(1, 2, 3, 4, 5);
>
>     primes.removeFront();
>
>     primes.insert(10);
>     primes.insert(11);
>     primes.insertFront(12);
>     primes.insertAfter(primes.opSlice(), 13);
>
>     writeln(primes.opSlice());
> }
> ```

>
> '[12, 11, 10, 2, 3, 4, 5, 13]'
>
> Belirli bir konumdaki elemanı çıkartma işlemi yok. (Zaten bağlı listeye uygun bir işlem değil.) find() gibi işlevleri de topluluklar üzerinde değil, algoritmalar olarak isteriz. Daha kullanışlıdır. D'de şöyle:
>
>
>

import std.algorithm;
// ...
writeln(find(primes.opSlice(), 4));

>

Çıktısı:

'[4, 5, 13]'

Çünkü find(), aralığın bulduğu noktadan sonrasını yine bir aralık olarak verir. Bulunan elemanı kullanmak istediğimizde sonuç.front deriz.

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

July 14, 2012

Alıntı (Salih Dinçer):

>

Gerçi benim asıl merak ettiğim; gerek C# olsun gerekse D, verdiği olanaklar ne kadar hızlı?

Bu tür konular genelde bir takım testler sonucu ortaya konabilicek durumlar. Dolayısıyla bu konuyu sana bırakmak bence en dogrusu olur :)

Alıntı (Salih Dinçer):

>

Ayrıca C#'da remove ile dizi taşıyıcısından eleman çıkarıldığında aynı içerikteki tümünü (tıpkı önceki sayfada keşfettiğimiz gibi) siliyor mu?

Dogrusunu istersen eğer silinecek deger ile arama yapıyorsan ben tüm değerlerin silinmesini beklerim. Ancak aşağıdaki örnek bunun böyle olmadığını gösteriyor. Neticede sanırım en güzeli önce kullanım kılavuzunu okumak ;) Hüseyin'in konusunu dağıtmamak için elimden geldiğince kısa tutmaya çalıştım.

class Program
   {
       static void Main(string[] args)
       {
           ArrayList myArr = new ArrayList();

           myArr.Add("one");
           myArr.Add("two");
           myArr.Add("one");
           myArr.Add("three");
           myArr.Add("one");

           Console.WriteLine("Before deletion:");
           ShowArray(myArr);

           myArr.Remove("one");

           Console.WriteLine("\nAfter deletion:");
           ShowArray(myArr);

           Console.ReadLine();
       }

       static private void ShowArray(ArrayList myArr)
       {
           foreach (object obj in myArr)
           {
               Console.WriteLine(obj.ToString());
           }
       }
   }

Alıntı:

>

Before deletion:
one
two
one
three
one

After deletion:
two
one
three
one

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