gpt4 book ai didi

c# - 如何使用 Linq 从两个字典列表中获取唯一值?

转载 作者:太空狗 更新时间:2023-10-30 01:17:08 25 4
gpt4 key购买 nike

这是我的代码

public class Model
{
public Model();

public Dictionary<string, string> Data { get; set; }

}

list<dictionary<string,string>> data1;
list<dictionary<string,string>> data2;

data1=await get<model>();
data2=await get<model>();

data1[0]=[0][{id,101}]
[1][{name,one}]
[2][{marks,56}]
[3][{state,ap}]

data1[1]=[0][{id,102}]
[1][{name,two}]
[2][{marks,65}]
[3][{state,up}]

data1[2]=[0][{id,103}]
[1][{name,three}]
[2][{marks,89}]
[3][{state,usa}]



data2[0]=[0][{roleid,101}]
[1][{stdname,one}]
data2[1]=[0][{roleid,102}]
[1][{stdname,two}]

最后我想要像这样的输出

data3[0]=[0][{id,103}]
[1][{name,three}]
[2][{marks,89}]
[3][{state,usa}]

在上面的代码中,我有两个字典列表,我想比较两个列表来获取唯一的 id 值。上面两个列表的键名是不同的,除了基于第一个列表 id 和第二个列表 roleid 从两个列表中获取值。

最佳答案

假设你想与列表相交:

使用相交法。首先在两个字典之间实现一个比较器:

public class DictComparer : IEqualityComparer<Dictionary<string, string>>
{
public bool Equals(Dictionary<string, string> x, Dictionary<string, string> y)
{
return (x == y) || (x.Count == y.Count && !x.Except(y).Any());
}

public int GetHashCode(Dictionary<string, string> x)
{
var ret = 123;
foreach (var keyValue in x)
{
ret = ret + (keyValue.GetHashCode() * 31);
}
return ret;
}
}

然后像这样使用它:

var result = data1.Union(data2).Except(data1.Intersect(data2, new DictComparer()), new DictComparer());

编辑:注意到他想要的恰恰相反。相应地更改了功能。Edit2:我错过了字典的 GetHashCode 的正确实现。此实现似乎有效:link

关于c# - 如何使用 Linq 从两个字典列表中获取唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com