2009-06-22 6 views

답변

3

전적으로 귀하의 유스 케이스에 달려 있다고 생각합니다. 술어에서만 키를 사용해야 할 경우 두 번째 버전을 사용합니다. 그렇지 않으면 엄격하게 필요한 것보다 람다에 더 많은 정보를 추가하게됩니다.

하지만 여기에는 어렵고 빠른 규칙이 없다고 생각합니다. 키보드에서 자연스럽게 흘러 나오는 것만으로도 가능합니다.

마찬가지로 키와 값을 모두 사용해야하는 경우 첫 번째 키로 이동하십시오.

2

속도가 나는 당신이 할 것을 제안 후이 무엇인지 경우 :

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

이것은 당신이 action로 사용하는 어떤 방법 대리인의 작성을 필요로하지 않습니다.

위의 두 가지 예에서와 같이 델리게이트를 만드는 경우 루프에서 델리게이트를 생성하고 하나의 델리게이트 인스턴스 만 만들 수 있으므로 성능상의 이점은 거의 없습니다. 아직도 foreach은 어떤 ForEach 확장 방법보다 깔끔하고 읽기 쉽습니다.

+0

그가 람다를 가지고 있다면 그는 그 foreach를 정리하기 위해 'var'를 가지고 있습니다. – user7116

+0

실제로'.Keys'는 실질적으로 :'.Select (a => a.Key)'와 실질적으로 동일하기 때문에 절대 빠르지 않을 것입니다. KeyCollection : ICollection , IEnumerable , ICollection, IEnumerable'입니다. 어느 쪽이든 성능의 유일한 차이점은 처음으로 새 객체 (약 10 개의 정수를 더하는 것과 같습니다)를 할당해야한다는 것입니다. 그리고이 새 객체에는 부모 객체에 대한 참조가 있습니다. 따라서 메모리 사용량은 극히 적습니다. – Aidiakapi

2

가 나는 키 값 쌍을 반복보다 훨씬 더 의도를 표현하기 때문에 난 단지 키가 필요한 경우

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

를 사용하는 것을 선호하며 천천히 아니다 - 키를 액세스하는 O(1)입니다.

+1

사실, 나는 단순히 키 반복을위한 특정 성능을 언급하지 않는다고 생각합니다. (일반적으로 "foreach"에 대해 O (N)을 가정해야 함) - O (1)은 키의 값에 액세스 할 때만 적용됩니다. –

+0

Keys 속성에 액세스하는 것은 O (1)입니다. 일반적으로이 속성에 액세스하면 모든 키가 포함 된 새로운 배열이 만들어집니다. –

관련 문제