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

C# 我应该使用什么数据结构来表示多对一映射?,c#,data-structures,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["b

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

例如:

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<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  
你应该使用一个。 您可以这样使用它:

MyStruct.Get["a"]; // return 1
MyStruct.Get["aa"]; // return 1
MyStruct.Get["bbb"]; // return 2
MyStruct.Get["d"]; // return null
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方法。

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

MyStruct.Get["a"]; // return 1
MyStruct.Get["aa"]; // return 1
MyStruct.Get["bbb"]; // return 2
MyStruct.Get["d"]; // return null
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方法。

据我所知,类库中不存在此方法。您可以轻松创建自己的结构。钥匙的顺序重要吗?记住…钥匙的顺序不重要,没有预制结构?Java中有HashMap。我想你在第一个键中的意思是
“aaa”
。可能的重复我不确定字典在添加时是否会重复值,但它似乎不会。据我所知,类库中不存在这一点。您可以轻松创建自己的结构。钥匙的顺序重要吗?记住…钥匙的顺序不重要,没有预制结构?Java中有HashMap。我想你在第一个键中的意思是
“aaa”
。可能的重复我不确定字典在添加时是否会重复值,但它似乎不会。小心,字符串是不可变的。“1”“1”参考信息。你应该说清楚。对于较长的字符串,这可能是一个问题。此外,
Dictionary
在输入重复键时引发异常。值得一提。@FirstStep--不输入复制键,只输入复制值(如果您考虑到我的第一条评论的话)。@YongkeBillYu--只需为引用该对象的所有键传递相同的对象。我认为还值得一提的是,当使用您自己的键类型时,它应该是不可变的。对键使用可变类型是可能的,但如果不小心,会导致痛苦的世界。小心,字符串是不可变的。“1”“1”参考信息。你应该说清楚。对于较长的字符串,这可能是一个问题。此外,
Dictionary
在输入重复键时引发异常。值得一提。@FirstStep--不输入复制键,只输入复制值(如果您考虑到我的第一条评论的话)。@YongkeBillYu--只需为引用该对象的所有键传递相同的对象。我认为还值得一提的是,当使用您自己的键类型时,它应该是不可变的。对键使用可变类型是可能的,但如果不小心,会导致痛苦的世界。