Cosa è meglio usare: Dictionary < > .ForEach (pair = >) o Dictionary < > .Keys.ForEach (key = >)?

StackOverflow https://stackoverflow.com/questions/1027389

Domanda

Se ho accesso solo a chiavi da un Dizionario < TKey, TValue > cosa è meglio usare:

Dictionary<TKey, TValue>.ForEach(pair => action(pair.Key))

o

Dictionary<TKey, TValue>.Keys.ForEach(key => action(key))

Quale metodo è più "best practice"? Penso che la velocità in entrambi i casi sia molto simile.

È stato utile?

Soluzione

Penso che questo dipenda interamente dal tuo caso d'uso. Se hai solo bisogno di usare la chiave nel predicato, userei la seconda versione. Altrimenti stai aggiungendo più informazioni al lambda di quanto sia strettamente necessario.

Ma non credo che ci sia una regola dura e veloce qui. Probabilmente tutto ciò che scorre dalla tastiera in modo più naturale.

Allo stesso modo, se è necessario utilizzare sia la chiave che il valore, procedere con il primo.

Altri suggerimenti

Preferisco usare

foreach (TKey key in dictionary.Keys)
{
    DoStuff(key);
}

se ho solo bisogno delle chiavi perché esprime l'intenzione molto meglio che iterare sulle coppie di valori chiave e non è lento - l'accesso a una chiave è O (1) .

Se la velocità è ciò che cerchi, ti suggerirei di farlo:

foreach (TKey key in yourDictionary.Keys)
    action(key)

Questo non richiede la creazione di un delegato per qualunque metodo tu stia usando come azione .

Nota che questo sarà un vantaggio minimo in termini di prestazioni poiché nel caso in cui crei un delegato (come nei tuoi due esempi) il compilatore solleverà la creazione del delegato dal ciclo e creerà solo un'istanza delegata . Trovo ancora foreach più pulito e più facile da leggere rispetto a qualsiasi metodo di estensione ForEach .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top