2013-08-04 9 views
5

Mam TDictionary jakpoprawny sposób dysponowania TDictionary po sortowaniu go do tablicy

target_results : TDictionary<longint,double>; 

Po wypełniania go trzeba posortować wyniki. Robię to w ten sposób:

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 
        )); 

Wszystko działa zgodnie z oczekiwaniami. Moje pytanie brzmi: jak pozbyć się TDictionary i TArray bez żadnych wycieków? Obecnie jestem po prostu robi

target_results.Free; 
+0

Nie rozumiem, dlaczego używasz słownika. Wygląda na to, że powinna to być TList . –

+3

@DavidHeffernan Wykonuję kilka zapytań, aby określić ostateczny wynik. Każde zapytanie dostarcza zbioru wyników cząstkowych. Używam TDictionary.AddOrSetValue w celu dodania nowego wpisu lub dodania podsumy do istniejącego klucza. Czy uważasz, że jest to najbardziej wydajna struktura, aby to dopasować? Dzięki! –

+1

Jeśli wykonujesz wyszukiwanie klucza, słownik jest dobry. Oczywiście ten aspekt nie jest w Q, stąd moje zapytanie. Wygląda jednak na to, że masz odpowiednią strukturę danych. –

Odpowiedz

6

Ponieważ dane są longints i dwuosobowe, które są oba typy wartości, zwalniając słownika będzie działać dobrze. Twoja tablica będzie zawierała kopię oryginalnych wartości i nie musisz się martwić o utratę lub uszkodzenie czegokolwiek.

Jeśli zamiast tego miałeś typy obiektów i miałeś TObjectDictionary, który był właścicielem obiektów, to musiałbyś się martwić takimi rzeczami, ale w przypadku danych czysto numerycznych nic ci nie jest.

Powiązane problemy