Ho il codice seguente:È possibile memorizzare nella cache query LINQ parzialmente eseguite?
IEnumerable<KeyValuePair<T, double>> items =
sequence.Select(item => new KeyValuePair<T, double>(item, weight(item)));
if (items.Any(pair => pair.Value<0))
throw new ArgumentException("Item weights cannot be less than zero.");
double sum = items.Sum(pair => pair.Value);
foreach (KeyValuePair<T, double> pair in items) {...}
Dove weight
è un Func<T, double>
.
Il problema è che voglio eseguire weight
il minor numero possibile di volte. Ciò significa che dovrebbe essere eseguito al massimo una volta per ogni elemento. Potrei ottenere questo salvandolo su un array. Tuttavia, se qualsiasi peso restituisce un valore negativo, non voglio continuare l'esecuzione.
C'è un modo per farlo facilmente all'interno del framework LINQ?
Perché? Memoization è il termine corretto per questo concetto: http://en.wikipedia.org/wiki/Memoization – mellamokb
@ L.B: OK, quale nome preferiresti per un * function memoizer *? –
@EricLippert Non penso che nessuna delle risposte sia all'interno del framework LINQ (la domanda originale). Se, d'altra parte, Memoize() era già parte di LINQ, allora THAT (imho) sarebbe la risposta alla domanda dell'OP. Penso che la tua risposta dovrebbe iniziare con "No, ma puoi estendere la funzionalità in questo modo:" Forse questo non è l'intento letterale del PO. – payo