2014-12-04 7 views
1

사전을 더 작은 부분으로 나눌 수 있습니다. 내 접근 방식은 효과적입니다. 더 효율적인 방법이 있는지 궁금합니다. 예를 들어 사전에는 10 개의 요소가 있지만 내 코드는 최대 1000 개까지 가질 수 있으며 API에 전달할 배치는 50 개입니다.Sub 사전을 작은 부분으로 나눕니다.

내 퀘스트가이 일을하는보다 효율적인 방법은 ...?

int divideamount = 2; 

Dictionary<string, string> dictionary = new Dictionary<string, string>(); 
dictionary.Add("cat1", "cat"); 
dictionary.Add("dog2", "cat"); 
dictionary.Add("cat3", "cat"); 
dictionary.Add("dog4", "cat"); 
dictionary.Add("cat5", "cat"); 
dictionary.Add("dog6", "cat"); 
dictionary.Add("cat7", "cat"); 
dictionary.Add("dog8", "cat"); 
dictionary.Add("cat9", "cat"); 
dictionary.Add("dog10", "cat"); 


var divided_dictionary 
    = dictionary.Select((value, index) => new { Index = index, Value = value }) 
       .GroupBy(x => x.Index/divideamount) 
       .Select(g => g.Select(x => x.Value).ToDictionary(x => x.Key, x => x.Value)) 
       .ToList(); 


foreach (Dictionary<string, string> division in divided_dictionary) 
{ 
    // do some work 
} 

도움이나 의견을 미리 보내 주셔서 감사합니다.

답변

5

Partition method from moreLINQ library을 사용할 수 있습니다.

var divided_dictionary 
    = dictionary.Partition(divideamount) 
       .Select(x => x.ToDictionary(i => i.Key, i => i.Value)); 

얼마 전 LINQ를 사용하여 파티셔닝 모음집에 대한 블로그 글을 작성했습니다. 유용 할 수 있습니다 : Partitioning the collection using LINQ: different approaches, different performance, the same result.

+0

매우 잘 쓰여지고 유용합니다. 도와 주셔서 감사합니다. 나는 그것을 지금 시도 할 것이다. –

+0

그 덕분에 다시 한 번 덕분에 나를 위해 유익한 매력을했습니다. –

관련 문제