首页 > 解决方案 > 检查带有对象的字典是否包含具有相同属性的两个对象

问题描述

我的问题不重复,因为您标记的问题正在搜索List,我正在尝试搜索Dictionary

我有一个Dictionary<string, Player>.

Player是一个具有属性GameID, Index等等的对象。我的字典键是播放器的index。我想检查字典是否包含两个Player相同的 s GameID(那些index会有所不同)。这样做的一种方法是迭代foreach字典值并使用一个变量,每次遇到某些GameID. 但我想知道是否有办法通过使用来做到这一点linq?如果有,该解决方案可能会更好。

标签: c#linq

解决方案


与列表不同,字典提供了访问其条目之一的恒定复杂性。

a 的目的Dictionary是映射一个 Key -> Value 关系,其中键是唯一的。通过使用通用索引作为 Key,与List<Player>.

因此,与其回答一个效率低下的问题,我将提供一个更有效的解决方案来重新制定原始问题。

您可以在此处找到 Multimap(具有多个键的字典)的实现,您可以在其中表示GameID-> Index关系并计算出现次数,此处: multimap in .NET

与(当前)接受的答案相比,它具有线性时间复杂度( O(N) )并且对于更大的字典或列表变得越来越糟,即使在 Linq 中的 IQueryable 中进行了优化,这也提供了恒定的复杂度。


推荐阅读