Bạn có thể sử dụng bản ghi làm Giá trị khóa trong TDictionary không? Tôi muốn tìm các đối tượng dựa trên sự kết hợp của chuỗi, số nguyên và số nguyên.delphi Sử dụng các bản ghi làm khóa trong TDictionary
TUserParKey=record
App:string;
ID:integer;
Nr:integer;
end;
...
var
tmpKey:TUserParKey;
tmpObject:TObject;
begin
tmpObject:= TTObject.Create(1);
tmpKey.App:='1';
tmpKey.ID :=1;
tmpKey.Nr :=1;
DTUserPars.Add(tmpKey,tmpObject)
...
var
tmpKey:TUserParKey;
begin
tmpKey.App:='1';
tmpKey.ID :=1;
tmpKey.Nr :=1;
if not DTUserPars.TryGetValue(tmpKey,Result) then begin
result := TTObject.Create(2);
end;
lợi nhuận này đối tượng 2.
thnx cho mã. Bobjenkinshash là gì? và tại sao nó lại cần thiết? Băm của tôi trông như thế này tmpStr: = ''; cho I: = 1 đến Value.App.length do tmpStr: = tmpStr + inttostr (ord (Value.app [i])); tmpStr: = tmpStr + inttostr (Value.ID) + inttostr (Giá trị.Nr); kết quả: = StrToIntDef (tmpStr, -1); –
Đó là từ Generics.Defaults và được sử dụng cho tất cả các chức năng GetHashCode trong các bộ so sánh. Mã của bạn sẽ dễ dàng bị lỗi vì nhiều lý do - xin đừng làm như vậy. –
Điều này sẽ dẫn đến lỗi kiểm tra phạm vi cho các chuỗi trống có bật kiểm tra phạm vi. Nó sẽ được tốt đẹp để làm thois mà không cần phải gọi BobJenkinsHash mà cảm thấy mức độ khá thấp. Nó sẽ ngắn gọn hơn khi sử dụng các phương thức anon và Xây dựng hơn là khai báo một lớp. Đôi khi cảm thấy tốt hơn. +1 –