如何将字典分成两部分

时间:2017-11-09 07:20:14

标签: c# dictionary

如何将一个字典项分成两个单独的字典。例如..

Dictionary<string, int> dict = new Dictionary<string, int>();

dictionary.Add("cat1", 1);
dictionary.Add("dog2", 2);
dictionary.Add("cat3", 3);
dictionary.Add("dog4", 4);
dictionary.Add("cat5", 5);
dictionary.Add("dog6", 6);
dictionary.Add("cat7", 7);
dictionary.Add("dog8", 8);
dictionary.Add("cat9", 9);
dictionary.Add("dog10", 10);
...
dictionary.Add("dog100", 100);

这个“dict”包含100个项目。但我需要在两个不同的字典中分开前五十个和最后五十个项目,比如..

Dictionary<string, int> dict1 = new Dictionary<string, int>();
Dictionary<string, int> dict2 = new Dictionary<string, int>();

请指导我..

由于

3 个答案:

答案 0 :(得分:3)

你可以这样做:

Dictionary<string, int> dict1 = dict.Take(50).ToDictionary(c=>c.Key, c=>c.Value);

Dictionary<string, int> dict2 = dict.Skip(50).ToDictionary(c=>c.Key, c=>c.Value);

使用订单(假设您要在示例中订购value integer部分:

Dictionary<string, int> dict1 = dict.OrderBy(c=>c.Value).Take(50).ToDictionary(c=>c.Key, c=>c.Value);

Dictionary<string, int> dict2 = dict.OrderBy(c=>c.Value).Skip(50).ToDictionary(c=>c.Key, c=>c.Value);

答案 1 :(得分:0)

在模块化算术的帮助下,让我们将字典分成N个(广义问题;最后一个块可能比其他块大):

   Dictionary<string, int> dictionary = ...

   int N = 2;
   int mod = dictionary.Count / N;

   Dictionary<string, int>[] result = dictionary
     .Select((pair, index) => new {
        index = index,
        pair = pair,  
      })      
     .GroupBy(item => item.index / mod > N - 1 ? N - 1 : item.index / mod) 
     .Select(chunk => chunk.ToDictionary(item => item.pair.Key, item => item.pair.Value)) 
     .ToArray();

    Dictionary<string, int> dict1 = result[0];
    Dictionary<string, int> dict2 = result[1]; 

答案 2 :(得分:0)

如果你不喜欢Linq,请玩得开心:

var firstHalf = new Dictionary<string, int>();
int i = 0, count = dictionary.Count;
foreach (var item in dictionary.Keys.ToList())
{
     firstHalf.Add(item, dictionary[item]);
     dictionary.Remove(item);
     if (++i == count / 2) break;
}

请注意,原始字典dictionary现在只包含之前的字典的后半部分。

相关问题