2014-12-04 3 views
1

Я пытаюсь подразделить словарь на более мелкие части. Мой подход работает, мне просто интересно, есть ли более эффективный способ сделать это. Для примера, словарь имеет 10 элементов, но мой код может иметь до 1000 и будет состоять из 50, к которым я перехожу на api.Sub разделите словарь на более мелкие части

У моего Questain есть более эффективный способ сделать это ...?

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

Это работало шармом, спасибо снова и очень информативно для меня. –

Смежные вопросы