2013-08-04 19 views
5

Ho un TDictionary comemodo corretto di smaltire TDictionary dopo classificare in un array

target_results : TDictionary<longint,double>; 

Dopo popolato devo ordinare i risultati. Lo faccio in questo modo

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

Tutto funziona come previsto. La mia domanda è: come posso smaltire il TDictionary e il TArray senza perdite? Attualmente sto facendo solo

target_results.Free; 
+0

Non capisco perché usi un dizionario. Sembra che dovrebbe essere TList . –

+3

@DavidHeffernan Sto facendo un sacco di domande per determinare il punteggio finale. Ogni query porta un insieme di punteggi sub-totali. Io uso TDictionary.AddOrSetValue per aggiungere una nuova voce o aggiungere il subtotale alla chiave esistente. Diresti che questa è la struttura più efficiente per adattarsi a questo? Grazie! –

+1

Se si sta eseguendo la ricerca della chiave, un dizionario è buono. Certo, quell'aspetto non è nella Q, quindi la mia domanda. Ma sembra che tu abbia la giusta struttura dati. –

risposta

6

Poiché i tuoi dati sono longines e double, che sono entrambi tipi di valore, liberare il dizionario funzionerà correttamente. Il tuo array conterrà una copia dei valori originali e non dovrai preoccuparti di perdere o corrompere nulla.

Se avevi invece tipi di oggetto e disponevi di uno TObjectDictionary che possedeva gli oggetti, allora dovresti preoccuparti di questo genere di cose, ma per i dati puramente numerici, stai bene.