Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
TDictionary - sorting integer value
#1
Merhaba,

 
ListUlkeC: TDictionary<String, Integer>;

şeklinde bir TDictionary kullanıyorum. Buraya verileri sıralı giriyorum fakat daha sonra

for tmpStr in ListUlkeC.Keys.ToArray do

şeklinde almak istediğimde karışık olarak geliyor. Value kısmındaki integer değerine göre büyükten küçüğe sıralamak istiyorum fakat araştırmama göre TDictionary için bu mümkün değil. 
StringList olarak alıp costumsort edeyim daha sonra value den key i çeker sıralarım diyordum fakat aynı value değerine sahip veriler olduğu için karışacaktır. Büyük bir çıkmaza girdim.

https://stackoverflow.com/questions/3978...stringlist
Burada 2. verilen kod bloğunda TObject kullanılarak yapılmış. Aslında tam istediğim şekilde fakat benzer bir kodun altına(https://stackoverflow.com/questions/4019...-by-intege) burada şu şekilde bir yorum bırakılmış.
Alıntı:Note this this will only work on desktop compilers. Casting an integer to and from object is not allowed in the mobile compilers. – Rudy Velthuis
Cevapla
#2
Generic list (TList<T>) kullanarak istediğiniz yapıya uygun liste tutabilir ve sıralayabilirsiniz.
uses System.Generics.Collections, System.Generics.Defaults;

type
  TDeger=record
    Key: string;
    Value: Integer;
  end;
var Liste: TList<TDeger>;

procedure TForm1.FormCreate(Sender: TObject);
var Deger: TDeger;
begin
  Liste := TList<TDeger>.Create;
  Deger.Key := 'Kırşehir'; Deger.Value := 7; Liste.Add(Deger);
  Deger.Key := 'Kırıkkale';  Deger.Value := 8; Liste.Add(Deger);
  Deger.Key := 'Kırklareli';   Deger.Value := 2; Liste.Add(Deger);
end;

procedure TForm1.FormdaButtonClick(Sender: TObject);
begin
  Liste.Sort(TComparer<TDeger>.Construct(function(const Left, Right: TDeger): Integer
    begin
      if Left.Key = Right.Key then
        Result := 0
      else if Left.Key < Right.Key then
        Result := -1
      else
        Result := 1;
    end));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Liste.Free;
end;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Hex bir değeri, 37 bit integer değere çevirme Adem Kurt 5 657 14-01-2020, Saat: 09:30
Son Yorum: adelphiforumz
  TDictionary - value ile key değerini bulma berk06 4 712 07-12-2019, Saat: 00:27
Son Yorum: berk06



Konuyu Okuyanlar: 1 Ziyaretçi