两个Dictionary 如何合在一齐?

musicrabbit 2011-06-17 05:05:05
Dictionary <int,int> A
1,1
2,2
Dictionary <int,int> B
3,3

Dictionary <int,int> C
1,1
2,2
3,3

.....怎么把A与B组成C?

别说用循环....


...全文
1082 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
老毕 2011-06-17
  • 打赏
  • 举报
回复
var返回的类型实际为 IEnumerable<KeyValuePair<int, string>>

最近学习Linq,发现有的东西挺象原来C++的模板的,哈哈。
老毕 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lovesongforever 的回复:]
当有相同的key,不同的value出现时, 使用Union和Cancat的结果是相同的。
[/Quote]

Dictionary要求Key唯一,所以单纯的Union或者Concat并不能真正符合Dictionary的本意。测试代码如下:
一、数据源:
Dictionary<int,string> dicA = new Dictionary<int, string> {
{1,"Jack"},
{2,"Loocy"},
{3,"Kitty"}};

Dictionary<int,string> dicB = new Dictionary<int, string> {
{4,"Lancy"},
{5,"Kanbory"},
{2,"Mistake"}};

第一种方式,使用var,而并不声明为Dictionary
            var items = dicA.Concat(dicB);
foreach (var item in items)
{
Console.WriteLine("[{0}]: {1}", item.Key, item.Value);
}

输出:
[1]: Jack
[2]: Loocy
[3]: Kitty
[4]: Lancy
[5]: Kanbory
[2]: Mistake

第二种:显式地声明为Dictionary<int,string>
            Dictionary<int,string> items2 = dicA.Concat(dicB).ToDictionary(k => k.Key, v => v.Value);
foreach (var item in items2)
{
Console.WriteLine("[{0}]: {1}", item.Key, item.Value);
}

触发异常:
未经处理的异常:  System.ArgumentException: 已添加了具有相同键的项。
claymore1114 2011-06-17
  • 打赏
  • 举报
回复
要先 除去 重复的键吧,不然 Union\Cancat操作 会报错的.

vrhero 2011-06-17
  • 打赏
  • 举报
回复
复制数组不用循环,前提你必须确保两个集合的键不会重复...
var a = A.ToArray();
var b = B.ToArray();
var c = new KeyValuePair<int, int>[a.Length + b.Length];
Array.Copy(a, c, a.Length);
Array.Copy(b, 0, c, a.Length, b.Length);
C = c.ToDictionary(k => k.Key, e => e.Value);
garfieldzf 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 abbey 的回复:]

引用 5 楼 q107770540 的回复:

如果两个里边有重复的怎么处理?


是啊,Dictionary是键唯一的。遇到Key重复,而Value不一样的怎么处理?
[/Quote]

当有相同的key,不同的value出现时, 使用Union和Cancat的结果是相同的。
老毕 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 q107770540 的回复:]

如果两个里边有重复的怎么处理?
[/Quote]

是啊,Dictionary是键唯一的。遇到Key重复,而Value不一样的怎么处理?
garfieldzf 2011-06-17
  • 打赏
  • 举报
回复
Concat. 追加
garfieldzf 2011-06-17
  • 打赏
  • 举报
回复
重复:
如果重复数据的key,value 相同的话则覆盖。
如果key相同,value不相同,则写入新数据。
q107770540 2011-06-17
  • 打赏
  • 举报
回复
如果要合并重复的 用 4楼 A.Union(B);
如果不合并重复的 可以 : A.Concat(B);
q107770540 2011-06-17
  • 打赏
  • 举报
回复
如果两个里边有重复的怎么处理?
garfieldzf 2011-06-17
  • 打赏
  • 举报
回复

Dictionary<int, int> A = new Dictionary<int, int>();
A.Add(1, 1);
A.Add(2, 2);

Dictionary<int, int> B = new Dictionary<int, int>();
B.Add(3, 3);
var query = A.Union(B);
种草德鲁伊 2011-06-17
  • 打赏
  • 举报
回复
不管是框架本身提供的方法还是自己写的方法,我想肯定会用到循环。
garfieldzf 2011-06-17
  • 打赏
  • 举报
回复
合并两个集合
garfieldzf 2011-06-17
  • 打赏
  • 举报
回复
Union

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧