In un Dictionary<struct,int>
: è possibile Aggiungere/Impostare in una chiamata?C# Dizionario Aggiungi/Imposta in una chiamata per motivi di prestazioni
Quindi è possibile fare il codice qui sotto in una sola ricerca per voce?
_KeyToPoints = new Dictionary<Key,int>();
foreach (var entry in billionEntries)
{
int originalValue;
// first lookup
_KeyToPoints.TryGetValue(entry.Key, out originalValue);
// second lookup
_KeyToPoints[key] = originalValue + points;
}
Questo viene eseguito in un ciclo molto stretto su un'enorme quantità di dati, quindi tutte le prestazioni sono importanti.
Oppure esiste una struttura dati più adatta?
Non credo tu possa evitare di dover indicizzare nel dizionario due volte (una volta per ottenere un valore esistente, e ancora per impostare il valore), ma puoi saltare l'impostazione del valore originale su 0, poiché TryGetValue lo farà per te se la chiave non viene trovata. E, è necessario verificare se TryGetValue restituisce false. – SlimsGhost
Esiste un problema di prestazioni effettive relativo all'intero processo o stai semplicemente dicendo che ce ne sarà uno? Le ricerche del dizionario sono O (1), quindi con il look up (e il set relativo) dovrebbero esserci pochissime prestazioni) –
@SlimsGhost Non è necessario controllare il risultato in questo caso - se la chiave non esistesse, allora '_KeyToPoints [chiave]' memorizzerebbe '0 + punti' in quella posizione chiave. Il codice sarebbe lo stesso sia che la chiave esistesse o meno. –