如何在C#中从TKey获取字典TValue?
发布时间:2020-12-15 20:04:46 所属栏目:百科 来源:网络整理
导读:我宣布了字典obj. Dictionarystring,string aDict = new Dictionarystring,string(); aDict .Add("IP","Host"); 我记得, aDict [IP]的表达式可以返回值(Host). 现在,如果我走向相反的方向. 如何从价值中获取关键? aDict [主持人]? 字典是否是C#中的单行道,
我宣布了字典obj.
Dictionary<string,string> aDict = new Dictionary<string,string>(); aDict .Add("IP","Host"); 我记得, aDict [IP]的表达式可以返回值(Host). 现在,如果我走向相反的方向. 如何从价值中获取关键? aDict [主持人]? 字典是否是C#中的单行道,只能从Key运行到Value?谢谢. 解决方法
字典不是这样工作的,它们也不打算这样做.您将如何解决以下问题:
key = "1",value = "x",key = "2",value = "x" 你可以这样做: var keys = dict.Where(kvp => kvp.Value == someValue).Select(kvp => kvp.Key); foreach(var key in keys) { Console.WriteLine(key); } 但是如果你真的需要在键和值之间来回切换,你应该考虑将问题封装到双向映射中.这是一个非常简单的实现,您可以根据您的需求定制: class TwoWayDictionary<TLeft,TRight> { IDictionary<TLeft,TRight> leftToRight = new Dictionary<TLeft,TRight>(); IDictionary<TRight,TLeft> rightToLeft = new Dictionary<TRight,TLeft>(); public void Add(TLeft left,TRight right) { if (leftToRight.ContainsKey(left)) { throw new InvalidOperationException("key left is duplicate"); } if (rightToLeft.ContainsKey(right)) { throw new InvalidOperationException("key right is duplicate"); } leftToRight.Add(left,right); rightToLeft.Add(right,left); } public bool TryGetRightByLeft(TLeft left,out TRight right) { return leftToRight.TryGetValue(left,out right); } public bool TryGetLeftByRight(out TLeft left,TRight right) { return rightToLeft.TryGetValue(right,out left); } } 请注意,这假设没有密钥被复制. 现在你可以说: TwoWayDictionary<string,string> dict = new TwoWayDictionary<string,string>(); dict.Add("127.0.0.1","localhost"); string host; dict.TryGetRightByLeft("127.0.0.1",out host); // host is "localhost" string ip; dict.TryGetLeftByRight("localhost",out ip); // ip is "127.0.0.1" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |