2011-01-04 5 views
0

Dans un programme, j'ai besoin d'évaluer beaucoup d'objets. Le résultat de l'évaluation est un double. par exempleAjouter un nombre spécifique à un objet haché dans C#

Object myObject = new Object(x,y,z); 
double a = eval(myObject); 

après ce beaucoup d'autres objets devraient être évalués. Je veux éviter de réévaluer les mêmes objets. J'ai donc besoin d'ajouter des objets évalués et le résultat de l'évaluation à une structure de hachage.

par exemple quelque chose comme ceci après la première évaluation: -------> c'est un code pseudo

myHash.add(myObject, a); 

Object anotherObject = new Object(x,y,z); 

if (myHash.find(anotherObject)) 
    double evaluationForAnotherObject = myHash.get(anotherObject); 

toute aide serait très bien accueilli

+1

Memoization. Voir http://blogs.msdn.com/wesdyer/archive/2007/01/26/function-memoization.aspx – Ani

Répondre

2

Un Dictionary<TKey,TValue> peut être utilisé pour un tel recherches:

Dictionary<object,double> dict=new Dictionary<object,double>(); 
if(dict.ContainsKey(obj)) 
    x=dict[obj]; 

Il est important d'utiliser le comparateur d'égalité correct. Par exemple sur les objets, il utilise l'égalité référentielle par défaut. Si votre type TKey n'utilise pas la comparaison d'égalité souhaitée, vous pouvez fournir un IEqualityComparer<TKey> au constructeur du dictionnaire. Comme alternative, vous pouvez transmettre votre fonction dans un mémoizer. Il renvoie une nouvelle fonction qui met en cache le résultat des calculs précédents. SACHEZ que la bibliothèque MiscUtil en contient une.

Func<object,double> memoizingEval=Memoizer.Memoize(eval); 

puis utilisez memoizingEval(obj)

+0

Cela ne devrait-il pas être Dictionary ? –

Questions connexes