草庐IT

learning-swift-ordered-dictionari

全部标签

c# - 获取 Dictionary 中包含值 x 的所有键

我有这个:Dictionarydict=newDictionary();我想选择字典中包含值abc的所有项目。是否有内置函数可以让我轻松地做到这一点? 最佳答案 好吧,使用LINQ合理简单:varmatches=dict.Where(pair=>pair.Value=="abc").Select(pair=>pair.Key);请注意,这不会有任何效率-它是一个O(N)操作,因为它需要检查每个条目。如果您需要经常这样做,您可能需要考虑使用另一种数据结构-Dictionary专为按键快速查找而设计。

c# - 如何在给定 Dictionary<TKey,TValue> 类型的情况下获取 TKey 和 TValue 的类型

我想在给定Dictionary的情况下获取TKey和TValue的类型类型。例如。如果类型是Dictionary我想知道如何获得keyType=typeof(Int32)和valueType=typeof(字符串) 最佳答案 我认为这可能是您正在寻找的:Dictionarydictionary=newDictionary();Type[]arguments=dictionary.GetType().GetGenericArguments();TypekeyType=arguments[0];TypevalueType=argumen

c# - Dictionary<Key, Value> 上 .NET 二进制序列化的奇怪行为

我在.NET的二进制序列化中遇到了一个奇怪的行为,至少符合我的预期。在OnDeserialization回调之后,加载的Dictionary的所有项目都被添加到它们的父级。相比之下,List则采用另一种方式。这在现实世界的存储库代码中可能真的很烦人,例如,当您需要向字典项添加一些委托(delegate)时。请检查示例代码并观察断言。这是正常行为吗?[Serializable]publicclassData:IDeserializationCallback{publicListList{get;set;}publicDictionaryDictionary{get;set;}public

c# - Linq order by aggregate in select { }

这是我正在处理的一个:varfStep=frominspinsq.Inspectionswhereinsp.TestTimeStamp>dStartTime&&insp.TestTimeStamp我想按所选投影中的一个或多个字段排序。 最佳答案 最简单的更改可能是使用查询延续:varfStep=frominspinsq.Inspectionswhereinsp.TestTimeStamp>dStartTime&&insp.TestTimeStamp老实说,这基本上等同于使用“let”——真正的区别在于let引入了一个新范围变量,而查

c# - 将 Dictionary<MyType>.ValueCollection 转换为 IList<MyType>

我正在使用Dictionary在一个类(class)。该类实现了一个需要IList的接口(interface)被退回。有没有一种简单的方法可以将一个转换为另一个(无需复制整个内容)?我目前的解决方案如下:privateIListConvertToList(Dictionary.ValueCollectionvalueCollection){Listlist=newList();list.AddRange(valueCollection);returnlist;} 最佳答案 您需要复制一份,但这可能是件好事。在C#2中,您当前的代码几

c# - 从 foreach 中的 Dictionary 中删除一个键会导致问题吗?或者我应该更好地构建一个新的词典?

例如:1.foreach(variteminmyDic){if(item.value==42)myDic.remove(item.key);}无论内部括号中的语句如何影响myDic,迭代器是否会正常工作?2.varnewDic=myDic.where(x=>x.value!=42).ToDictionary(x=>x.key,x=>x.value);第二种方法是好的做法吗?函数式编程和不可变? 最佳答案 第一种方法会在运行时崩溃,因为枚举器确保在枚举时没有人从基础集合中删除。第二种方法是一个不错的想法,但是C#字典是可变的,如果您可

c# - c#中list<>和dictionary<>有什么区别

我对c#中的列表和字典有一个奇怪的疑问在列表中,我们使用以下方法将项目添加到列表usingSystem.Collections.Generic;classProgram{staticvoidMain(){Listlist=newList();list.Add(2);list.Add(3);list.Add(5);list.Add(7);}}在字典中我们添加这样的项目......usingSystem;usingSystem.Collections.Generic;classProgram{staticvoidMain(){Dictionaryd=newDictionary();d.Ad

c# - Dictionary.ContainsKey 返回 False,但想要 True

namespaceDic{publicclassKey{stringname;publicKey(stringn){name=n;}}classProgram{staticstringTest(){Keya=newKey("A");Keyb=newKey("A");System.Collections.Generic.Dictionaryd=newSystem.Collections.Generic.Dictionary();d.Add(a,1);returnd.ContainsKey(b).ToString();}staticvoidMain(string[]args){System

c# - 哪种机制是扩展 Dictionary 以处理丢失键的更好方法,为什么?

我发现自己经常遇到一个小烦恼-我有一个Dictionary包含可能存在或不存在的值。所以正常的行为是使用索引器,像这样:objectresult=myDictionary["key"];但是,如果"key"不在字典中这会抛出KeyNotFoundException,所以你改为这样做:objectval;if(!myDictionary.TryGetValue("key",outval)){val=ifNotFound;}这很好,除了我可以连续加载这些-TryGetValue开始觉得笨重得要命。所以选项1是一种扩展方法:publicstaticTValueTryGet(thisDicti

c# - 如何从 IReadOnlyDictionary<,> 创建新的 Dictionary<,>?

.NET4.5引入了方便的IReadOnlyDictionary界面。Dictionary是一个IReadOnlyDictionary,因此我可以在需要后者的任何地方传递前者。不过,我不确定相反的方法:我如何创建一个新的Dictionary基于现有IReadOnlyDictionary?Dictionary有几个采用IDictionary的构造函数--但没有一个需要IReadOnlyDictionary.IReadOnlyDictionary有一个扩展方法ToDictionary().但是,这是从IEnumerable继承的.所以要使用它,我必须像这样传递两个完全多余的代表:readO