c# - 我应该使用什么数据结构来表示多对一映射?

标签 c# data-structures

我有一组可以使用多个键访问的对象,我应该使用什么结构在内存中表示它?我需要的唯一操作是一个查找器,它将返回给我一个键的值。

例如:

key: {"a","aa","aaa"}, value {1}
key: {"b","bb","bbb"}, value {2}
key: {"c","cc","ccc"}, value {3}

我会这样使用它:

MyStruct.Get["a"]; // return 1
MyStruct.Get["aa"]; // return 1
MyStruct.Get["bbb"]; // return 2
MyStruct.Get["d"]; // return null

最佳答案

您应该使用 Dictionary 。 你可以像这样使用它:

Dictionary<string, int> myDict = new Dictionary<string, int>();
myDict.Add("a", 1);
myDict.Add("aa", 1);
myDict.Add("c", 3);

int result;
if (myDict.TryGetValue("a", out result)){
   //do something with result
}

或者你可以像这样进行查找:

int result1 = myDict["a"]; //throws exception when the value is not present  

使用您自己的类作为 TKey 参数时要小心。如果这样做,您应该重写 .Equals 和 .GetHashCode 方法。

关于c# - 我应该使用什么数据结构来表示多对一映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728288/

相关文章:

algorithm - 在完美二叉树中获取顶点的父节点

algorithm - 在 Floyd 循环查找算法中跳过一个以上的节点

multithreading - 具有更改优先级功能的优先级队列,它使元素保持有序

java - 需要在Java中通过数组来呈现二叉搜索树的节点。我怎么做?

c# - ObjectSet.AddObject(T) 问题?

c# - 调用 System.Console.WindowWidth 时出现 System.IO.IOException

c# - Unity UnityWebRequest 没有返回值

java - 优先级队列的堆实现?

c# - 在没有模拟框架的情况下验证方法调用和参数

c# - pkcs11 互操作 GetSlotList(SlotsType.WithTokenPresent);返回空列表