2012-04-27 7 views
3

내 개발자 친구는 델리게이트를 사용하여 루프가 훨씬 빠르다고 말하고 벤치 마크하고 싶지만 어떻게 작동하는지 점을 연결하는 데 문제가 있습니다.이 시나리오에서 대리인은 어떻게 사용합니까?

다음 잔액 계산기를 고려하십시오. 이것은 기본적으로 계정 목록을 소요하고있는 경우가 존재하는 경우 총 크레딧 값으로 초기 값 (시작 균형)를 추가하고 각 계정의 총 차변 값을 뺍니다

private static IDictionary<string, decimal> CalculateBalances(
     IDictionary<string, decimal> initialValue, 
     IDictionary<string, decimal> credits, 
     IDictionary<string, decimal> debits) 
    { 
     var r = new Dictionary<string, decimal>(); 

     foreach (var key in initialValue.Select(k => k.Key) 
      .Concat(credits.Select(k => k.Key)) 
      .Concat(debits.Select(k => k.Key)) 
      .Distinct()) 
     { 
      r.Add(key, 
       (initialValue.ContainsKey(key) ? initialValue[key] : 0M) 
       + (credits.ContainsKey(key) ? credits[key] : 0M) 
       - (debits.ContainsKey(key) ? debits[key] : 0M) 
       ); 
     } 

     return r; 
    } 

이 상당히 성능이 좋은입니다 중소 규모 계정 목록에 있지만 대리인을 더 빨리 사용할 수 있습니까? 그리고 솔직히 말해서, 위임 논리는 사고 과정에 직각으로 작동하는 것처럼 보입니다. 왜냐하면 저는 이것을 쓰는 방법에 대해서 머리를 긁적이기 때문입니다.

누구든지 위임자를 사용하여 다시 작성할 수 있습니까?

+0

참석자는 정확히 정확히 무엇보다 빠른 것으로되어 있습니까? 이미 람다에 대한 대리인을 사용하고 있습니다 (명시 적으로 만들지 않았더라도 그대로 있습니다). 친구의 루프 부분에서 대리인으로 대체 할 수 있습니까? – Sven

+0

그녀가 그것에 대해 이야기하는 방식입니다. 기본적으로 루프 내부의 모든 항목을 일부 대리인 전화로 바꿉니다. 나는 그녀가 말한 것을 알고있는 것처럼 회의적인 눈썹을 치켜 세웠다. –

+0

"델리게이트 로직이 내 사고 프로세스에 직각으로 작동하는 것 같다"는 기능 프로그래밍 언어 (예 : F #)로 장난감 프로젝트를 수행하고 "생각의 벡터"가 올바른 방향으로 확실하게 전환됩니다. – dasblinkenlight

답변

관련 문제