Forum: Ders Arası RSS
Dinamik Dizi Eleman Silme
Sayfa:  önceki  1  2 
zafer #16
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 6757
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-unboxi…) 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 ;)
https://github.com/zafer06 - depo
Avatar
huseyin #17
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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 :)
Huseyin
Avatar
Salih Dinçer #18
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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?

zafer on 2012-07-06, 05:29:
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);
    }
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
Salih Dinçer #19
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ayrıca alıntılamalıyım; Ali hocamı yazmaya (onu tekrar ettirmeye) zorunda bırakmadan:

acehreli on 2012-02-21, 13:38:
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.
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
zafer #20
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #18
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 :)

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());
            }
        }
    }

Before deletion:
one
two
one
three
one

After deletion:
two
one
three
one
https://github.com/zafer06 - depo
Avatar
Salih Dinçer #21
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bu denemen için teşekkür ederim Zafer, demek ki C#'daki bu özellik D'de yaptığımızın tam karşılığı değil. Hatta Ali hocamın örneğini görünce SList'lerin de farklı bir şey olduğu ortaya çıkıyor. Yani doğrudan silme diye bir şey yokmuş. Ara&bul olayı var...

Neticede basit güzeldir ve iyi çalışır hesabına geliyor. Hüseyin'in yaptığı ile C#'da olan farklı bir şey olmalı, ne dersiniz?
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
huseyin #22
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet şöyle bir internette arama yaptım bir kaç forumda ara bul metodu şartmış ArrayList kullanırsak Zafer in verdiği örnekteki gibi oluyor ama ille de normal dizi kullanacaksak benim yazdığım şekilde arama yoluyla silinebiliyor ilgilendiğiniz için teşekkür ederim
Huseyin
Avatar
Salih Dinçer #23
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Estağfirullah,

Asıl ben teşekkür ederim Hüseyin. Forumdaki tüm arkadaşlarım sayesinde ne çok şey öğreniyorum; öğreniyor nice insan...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  önceki  1  2 
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 10:59:38 (UTC -08:00)