如何将一个字典项分成两个单独的字典。例如..
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>();
请指导我..
由于
答案 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
现在只包含之前的字典的后半部分。