将字典拆分为多个大小相等的字典

时间:2015-05-12 11:22:08

标签: c# .net dictionary split

我有Dictionary如下所示。假设Dictionary中有400个元素我希望将此Dictionary拆分成4个大小相等的字典。我该怎么做呢?有了列表,我可以使用范围方法,但不知道该怎么做?

我并不关心Dictionary是如何被分割的,只是为了它们的大小相等。

Dictionary<string, CompanyDetails> coDic;

3 个答案:

答案 0 :(得分:10)

您可以使用简单模数将字典分成几部分:

int numberOfGroups = 4;
int counter = 0;

var result = dict.GroupBy(x => counter++ % numberOfGroups);

模数(%)使GroupBy限制在0..3范围内的数字(实际为0..numberOfGroups - 1)。这将为您进行分组。

虽然这个问题是它没有保留订单。这个确实:

decimal numberOfGroups = 4;
int counter = 0;
int groupSize = Convert.ToInt32(Math.Ceiling(dict.Count / numberOfGroups));

var result = dict.GroupBy(x => counter++ / groupSize);

答案 1 :(得分:3)

我会使用以下查询:

Dictionary<string, CompanyDetails>[] result =
    dict
        .Select((kvp, n) => new { kvp, k = n % 4 })
        .GroupBy(x => x.k, x => x.kvp)
        .Select(x => x.ToDictionary(y => y.Key, y => y.Value))
        .ToArray();

这里的优点是避免关闭计数器,因为.Select((kvp, n) => ...)语句内置了一个计数器。

答案 2 :(得分:0)

我在此代码中合并了帖子。结果是在IEnumerable<Dictionary<string, string>>中使用foreach

int counter = 0;
int groupSize = 5;
IEnumerable<Dictionary<string, string>> result = info
    .GroupBy(x => counter++ / groupSize)
    .Select(g => g.ToDictionary(h => h.Key, h => h.Value));

foreach (Dictionary<string, string> rsl in result) {
    // your code
}