C# 如何从字典中查找密钥

C# 如何从字典中查找密钥,c#,unity3d,C#,Unity3d,我有一本字典,里面有一个Wall类型的键和一个List 看起来是这样的: newdictionary() 因此,我有一个瓷砖,我想找到所有的墙类型连接到这个瓷砖,这是埋在列表中 我不完全理解我是如何迭代字典来做这样的事情的,因为平铺也在列表中。如果我根本不使用字典进行这种数据连接,我不能完全确定我是否正确理解了这里的字典。我不认为字典是解决此问题的最佳数据结构: 所以我有一个瓷砖,我想找到所有连接到的墙类型 这是埋在列表中的瓷砖 您将不得不使用暴力(而且性能非常差): 字典//todo初始化 列

我有一本字典,里面有一个
Wall
类型的键和一个
List

看起来是这样的:

newdictionary()

因此,我有一个瓷砖,我想找到所有的墙类型连接到这个瓷砖,这是埋在列表中


我不完全理解我是如何迭代字典来做这样的事情的,因为平铺也在列表中。如果我根本不使用字典进行这种数据连接,我不能完全确定我是否正确理解了这里的字典。

我不认为
字典
是解决此问题的最佳数据结构:

所以我有一个瓷砖,我想找到所有连接到的墙类型 这是埋在列表中的瓷砖

您将不得不使用暴力(而且性能非常差):

字典//todo初始化
列表结果=新列表();
foreach(字典中的var kvp){
if(kvp.Value.Contains(平铺))
结果.添加(kvp.Key);
}
如果您有一个平铺,并且想要查找墙的列表,那么您需要
字典

字典//todo初始化
列表结果=字典[平铺];

这将很好地利用字典的功能。

Wall
如果是键,则应该是唯一的。我不明白你想如何找到特定于墙的
瓷砖
?好吧,假设我有一块瓷砖,我想找到所有作为瓷砖一部分的墙。因为瓷砖最多可以被4面墙包围。我之所以选择此设置,是因为一堵墙最多可以有两块瓷砖附着在一堵墙上(因此为列表),因为一堵墙最多可以分隔两块瓷砖。
Tile
列表是否表示同一面墙交出的瓷砖?@kat1330是,因此列表最多只包含两块瓷砖。我可能真的应该使用数组。你们不能在瓷砖和墙本身的结构中实现这一点吗?例如,具有属性
左、右、上、下
的瓷砖,因此每个属性都可以引用墙。和
Wall
Left,Right
参考瓷砖。但是
Tile
是参考类型吗?我想你需要实现相等比较器。是的,你很可能需要覆盖Equals()和GetHashCode(),不管这两个例子中的“键”是什么。嗯,所以我需要一个关于瓷砖,墙的字典和一个关于墙,瓷砖的字典,因为我有时也需要找到与墙相邻的瓷砖。这开始变得很难最终保持组织。也许我需要改变我的整体结构。你可能想要一个完全不同的数据结构来解决你的问题。我的回答只是说明了
字典的工作原理。是的,听起来确实像我。谢谢你的帮助。:)
Dictionary<Wall, List<Tile>> dictionary; //todo initialize
List<Wall> result = new List<Wall>();
foreach (var kvp in dictionary) {
   if (kvp.Value.Contains(tile))
       result.Add(kvp.Key);
}
Dictionary<Tile, List<Wall>> dictionary; //todo initialize
List<Wall> result = dictionary[tile];