Iniziamo con il problema:
C'è un grande dizionario X che contiene coppie {chiave, valore}, cioè:
X = [{100, 10}, {101, 0}, {103, 0}, {106, 2}, {110, 1}]
Ogni t secondi, X deve essere aggiornato con i valori del sottotitolo U e 0 impostati su ciascun valore per una chiave che non è presente nella nuova U aggiornata, ma che era nell'aggiornamento precedente.
I requisiti più importanti sono che un aggiornamento deve essere eseguito in modo tale che sia stato eseguito il numero minimo di operazioni di aggiornamento di ciascuna coppia di chiavi {valore,} nel dizionario X, cioè.
X aggiornato da U dove
U = [{100, 10}, {102, 5}, {103, 0}, {105, 1}, {110, 0}]
diventerebbe:
X = [{100, 10}, {101, 0}, {102, 5}, {103, 0}, {105, 1}, {106, 2}, {110, 0}]
ma solo le seguenti coppie sono state aggiornate / aggiunte in X:
{102, 5}
{105, 1}
{110, 0}
Per rendere le cose un po 'più interessanti, ci sono alcuni vincoli:
- è molto costoso iterare sul dizionario X. Supponiamo che X sia molto grande.
- è molto costoso effettuare un aggiornamento alla coppia {chiave, valore}, quindi l'operazione è di minimizzare questo costo.
Quindi questo era il problema dichiarato. Ecco la mia soluzione:
La prima idea che avevo era di salvare il dizionario U dopo aver aggiornato X. Al prossimo aggiornamento prendo ogni tasto da Uprev e lo metto a 0 in X.
foreach (var pair in Uprev)
{
X[pair.Key] = 0;
}
Dopo che questo è stato fatto, vorrei fare un ciclo per impostare nuovi valori per le chiavi presenti nel nuovo dizionario U:
foreach (var pair in U)
{
if (X.ContainsKey(pair.Key))
X[pair.Key] = pair.Value;
else
X.Add(pair.Key, pair.Value);
}
Quindi ... la domanda: c'è una soluzione migliore per il problema che ho descritto sopra? È possibile gestire meglio gli aggiornamenti? Tutte le idee sono benvenute, quindi sentiti libero di postare qualsiasi cosa ti venga in mente.
Grazie per il contributo