4 Ocak 2018 Perşembe

Dictionary Tekrarlanan Kayıt Eklenir mi ?

      S.a. Arkadaşlar,
      Artık eskisi kadar maalesef sık yazamıyorum. Klasik nedenlerinden biri iş olsa da bu aralar java değil C# kodluyor olmam. İkisi eklenince eskisi gibi yazamıyorum. Bazen hevesleniyorum ama daha çok programlama diline özgü değil de iyi kodun yazılması ile ilgili şeyler okumak ve öğrenmeye vakit harcıyorum. Onları yazmam için de bilgilerimin daha olgunlaşmasını bekliyorum. Kısa bir girişten sonra konumuza dönelim :)



     Öncelikle yapmak istediğim şey farklı para birimlerinin toplamıydı. Yani kodlarına göre her para biriminin ayrı toplamları olmasıydı o yüzden liste kullandım.
 public List<string> list= new List<string>();

    Daha sonra bu paraların bir de tarih bazlı farklılaştırılması gerekti o yüzden de 2 parametre kullanmak gerekti. Aklıma doğal olarak dictionary geldi.
public  Dictionary<string, object> myDictionary = new  Dictionary<string, object>();

    fakat burda da aynı para türüne birden fazla değer tutmak gerekiyordu. Yani key'leri "TL" olan fakat value'leri farklı olan (tarihleri) değer tutacağım için bu yapı da hata verdi. Farklı key mantığında çalışan bir collection çünkü. Resim - 1'deki gibi bir hata vermektedir. Resim örnektir. Benim içeriğim para türü ve tarihe dayalıydı.

Resim -1
   
    Aklıma bir class veya struct oluşturup içine bu iki alanı verip onu listeye vermek geldi.
   public class AmountByDate
    {
        public string CurrencyCode{ get; set; }
        public DateTime Date{ get; set; }
    }

    public List<AmountByDate> list= new List<AmountByDate>();

     Bu arada bildiğiniz gibi dictionary'ların javadaki karşılığı map'ler (bu terimleri Türkçe cümlelerde kullanmak cidden zor oluyor, maalesef iyi bir Türkçe karşılığı yok.) Java'da bunu araştırdığımda karşımda MultiMap diye bir yapı çıktı , C#'ta ise buna çözüm olarak KeyValuePair yapısını kullandım. Tabi ki farklı çözümler geliştirilebilir. Şuan için ben bu yapıyı kullandım.
public List<KeyValuePair<string, DateTime>> CurrencySumList = new List<KeyValuePair<string, DateTime>>();

    Aslına baktığımız zaman yine list kullanılmış ve bir yapı oluşuturup onu içine vermek yerine böyle bir yol izlenmiş. İçine veri eklerken 
 CurrencySumList.Add(new KeyValuePair<string, DateTime>("TL",DateTime.Today);

   kod parçasını kullanabiliriz. Listemin içinde aradığım bir verinin olup olmaması da önemliydi benim için. Çünkü o veri yoksa listeye eklemem lazımdı. Onun için de 
CurrencySumList.Contains(new KeyValuePair<string, DateTime>("TL",DateTime.Today); 

    kod parçasını kullandım. Boolen değer döndürür. Varsa true yoksa false olarak döner. Yazıyı burada bitirmek istiyoruz. Yararlandığımız ve yararlanabileceğiniz linkler :

resmi aldığım site c-sharpcorner
Multi Map ile ilgili olan stackoverflow



Hiç yorum yok:

Yorum Gönder