Что лучше использовать: Dictionary <>. ForEach (pair =>) или Dictionary <>. Keys.ForEach (key =>)? - PullRequest
1 голос
/ 22 июня 2009

Если у меня есть только ключи доступа от Dictionary<TKey, TValue>, что лучше использовать:

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

или

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

Какой метод является более «передовым»? Скорость в обоих случаях кажется очень похожей.

Ответы [ 3 ]

3 голосов
/ 22 июня 2009

Я думаю, что это полностью зависит от вашего варианта использования. Если вам нужно только использовать ключ в предикате, я бы использовал вторую версию. В противном случае вы добавляете больше информации в лямбду, чем это строго необходимо.

Но я не думаю, что здесь есть жесткое и быстрое правило. Вероятно, все, что вытекает из клавиатуры более естественно.

Аналогично, если вам нужно использовать и ключ, и значение, переходите к первому.

2 голосов
/ 22 июня 2009

Я предпочитаю использовать

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

, если мне нужны только ключи, потому что он выражает намерение гораздо лучше, чем итерация по парам ключ-значение, и он не медленный - доступ к ключу O(1).

2 голосов
/ 22 июня 2009

Если вам нужна скорость, я бы посоветовал вам сделать следующее:

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

Это не требует создания делегата для любого метода, который вы используете как action.

Обратите внимание, что это будет минимальным выигрышем в производительности, поскольку в случае, когда вы создаете делегат (как в двух ваших примерах), компилятор поднимает создание делегата из цикла и создает только один экземпляр делегата. , Тем не менее, я считаю foreach чище и проще для чтения, чем любой метод расширения ForEach.

...