2013-08-04 28 views
5

Tôi có một TDictionary nhưcách chính xác để xử lý TDictionary sau khi sắp xếp chúng thành một mảng

target_results : TDictionary<longint,double>; 

Sau Populating nó tôi cần phải sắp xếp kết quả. Tôi đang làm như thế này

type 
    TSearchResult = TPair<longint,double>; 

var 
target_results_array : TArray<TSearchResult>; 

target_results_array:= target_results.ToArray; 
TArray.Sort<TSearchResult>(best_knowledge_search_results, 
        TComparer<TSearchResult>.Construct(
           function(const L, R: TSearchResult): Integer 
           begin 
           if L.Value < R.Value then Result := 1 else if L.Value > R.Value then Result := -1 else Result := 0; 
           end 
        )); 

Tất cả đều hoạt động như mong đợi. Câu hỏi của tôi là làm thế nào để loại bỏ TDictionary và TArray mà không có bất kỳ rò rỉ nào? Hiện tại tôi chỉ đang thực hiện

target_results.Free; 
+0

Tôi không hiểu tại sao bạn sử dụng từ điển. Điều này có vẻ như nó phải là TList . –

+3

@DavidHeffernan Tôi đang thực hiện một loạt các truy vấn để xác định điểm số cuối cùng. Mỗi truy vấn mang đến một tập hợp các điểm tổng phụ. Tôi sử dụng TDictionary.AddOrSetValue để thêm một mục mới hoặc thêm tổng phụ vào khóa hiện có. Bạn có nói đây là cấu trúc hiệu quả nhất để phù hợp với điều này không? Cảm ơn! –

+1

Nếu bạn đang thực hiện tra cứu chính thì từ điển sẽ tốt. Tất nhiên, khía cạnh đó không có trong Q, do đó truy vấn của tôi. Nhưng có vẻ như bạn đã có cấu trúc dữ liệu đúng. –

Trả lời

6

Vì dữ liệu của bạn là long và đôi, cả hai loại giá trị, giải phóng từ điển đều hoạt động tốt. Mảng của bạn sẽ chứa một bản sao của các giá trị ban đầu, và bạn không cần phải lo lắng về việc mất hoặc làm hỏng bất cứ thứ gì.

Nếu bạn có loại đối tượng thay thế và bạn có TObjectDictionary sở hữu các đối tượng, thì bạn phải lo lắng về điều này, nhưng đối với dữ liệu thuần túy, bạn vẫn ổn.

Các vấn đề liên quan