Ben bir Delphi-newbie ve ben kayıtları tamsayı değeri artan sıralamak için bir TList of Records Sıralama yöntemi deniyorum alamadım.Özel bir karşılaştırıcı kullanarak genel bir listeyi nasıl sıralarım?
type
TMyRecord = record
str1: string;
str2: string;
intVal: integer;
end;
Ve böyle kayıtların genel bir listesi: Ben aşağıdaki gibi bir kayıt var
TListMyRecord = TList<TMyRecord>;
yardım dosyalarında kod-örnek bulmak denediniz ve bu bir bulundu:
MyList.Sort(@CompareNames);
Sınıfları kullandığı için kullanamadığım. Bu yüzden biraz farklı parametrelerle kendi karşılaştırmak fonksiyonunu yazmaya çalıştı:
function CompareIntVal(i1, i2: TMyRecord): Integer;
begin
Result := i1.intVal - i2.intVal;
end;
Fakat derleyici hep atar 'yeterli parametreleri' - ı bariz görünüyor open.Sort(CompareIntVal);
ile diyoruz hata; ...
Teşekkür verry çok! 'Kullanımlar' alanına ' Generics.Collections, ... 'kullanımından başka bir şey eklemem gerekiyor mu,' TComparison 've' IComparer'in' için bir 'kayıt dışı' aldım çünkü var Karşılaştırma: TComparison; IntegerComparer: IComparer ; '? –
Ayrıca, Generics.Defaults'a da ihtiyacınız var. Henüz RTL kaynak kodunu buldunuz. Bu sana yardımcı olur. –
@David, TComparer'ın sağladığınız bir kod için iyi bir seçim olduğundan emin misiniz? “TComparer” soyut temel sınıftır. Kodunuz için 'TDelegatedComparer 'kullanmayı öneririm. – TLama