Dictionary 与地图的复杂交集
我有两张K,V类型相同的地图 关键是国家 价值观是一张价值观的地图 因此,整个地图结构是Dictionary 与地图的复杂交集,dictionary,set-theory,Dictionary,Set Theory,我有两张K,V类型相同的地图 关键是国家 价值观是一张价值观的地图 因此,整个地图结构是 Map <String, Map<String, List<City>>> m1, m2; 输出应该是 Common = { India = [TA -> {City1, City2, City3} ] USA = [WI -> {City1, City3}] } 有没有更好的方法来获取这些信息,而不是在整个列表中循环并逐行检查(即
Map <String, Map<String, List<City>>> m1, m2;
输出应该是
Common = { India = [TA -> {City1, City2, City3} ]
USA = [WI -> {City1, City3}] }
有没有更好的方法来获取这些信息,而不是在整个列表中循环并逐行检查(即使有一个已经定义的方法可以做到这一点,这也很好)
我将使用它,以便我知道,在过去几年中,唯一发生变化的是少数几个城市和少数几个州
如有需要,我们将乐意进一步澄清
提前感谢。对于这两个贴图,最好的方法是通过每个键递增 但是,对于列表,如果列表已排序,请在列表的元素之间使用
干杯 很大程度上取决于要用于存储数据的收集类型。另一个因素是您将要使用的技术。然后还取决于代码的效率和可读性。我最喜欢的语言是C#,所以我会选择它。然后,按照您的建议,将整个过程实现为
字典
为了获取数据,我使用了LINQ,因为它提供了非常可读的代码
我实现了如下示例(为了简单起见,城市是简单字符串):
如果您调试它并展开result
,您将看到它返回您在示例中期望的值
请注意,您的
City
类必须实现IEquatable
接口,以便在Intersect
方法中正确处理它。我明白了,谢谢你的想法。不幸的是,它们也没有被排序。在这种情况下,可能是heapsort然后进行二进制搜索。合理的逻辑。谢谢你。我将尝试它,如果它起作用,我将返回:)。再次感谢回复中提到的,我在简单字符串上测试了它。如果您将字典和查询复制到VisualStudio项目中并运行它,您将得到结果。但是对于City
类,您需要实现IEquatable
接口来测试它是否工作。
Common = { India = [TA -> {City1, City2, City3} ]
USA = [WI -> {City1, City3}] }
var m1 = new Dictionary<string,Dictionary<string,List<string>>>
{
{
"India", new Dictionary<string, List<string>>
{
{"TA", new List<string> {"City1", "City2", "City3"}},
{"KA", new List<string> {"City1", "City2"}}
}
},
{
"USA", new Dictionary<string, List<string>>
{
{"WI", new List<string> {"City1", "City2", "City3"}},
{"OH", new List<string> {"City1", "City2"}}
}
}
};
var m2 = new Dictionary<string,Dictionary<string,List<string>>>
{
{
"India", new Dictionary<string, List<string>>
{
{"TA", new List<string> {"City1", "City2", "City3"}},
}
},
{
"USA", new Dictionary<string, List<string>>
{
{"WI", new List<string> {"City1", "City3"}},
{"DC", new List<string> {"City1"}}
}
}
};
var result = m1.Keys.Intersect(m2.Keys)
.ToDictionary(k => k, k => m1[k].Keys.Intersect(m2[k].Keys)
.ToDictionary(l => l, l => m1[k][l].Intersect(m2[k][l])));