Tag: 字典

Json.net反序列化嵌套字典

我正在使用Json.NET反序列化包含嵌套字典的对象。 以下是我想要做的一个示例 public interface IInterface { String Name { get; set; } } public class AClass : IInterface { public string Name { get; set; } } public class Container { public Dictionary Map { get; set; } public Container() { Map = new Dictionary(); } } public static void Main(string[] args) { var container […]

在可能未初始化的Dictionary元素上执行加号等于操作的简洁方法

我正在寻找一种扩展方法或任何其他建议,可以帮助我使这段代码尽可能简洁。 foreach( Layer lyr in this.ProgramLayers ) foreach( UWBCEvent evt in this.BcEvents.IncludedEvents ) EventGroupLayerLosses[new EventGroupIDLayerTuple(evt.EventGroupID, lyr)] += GetEL(evt.AsIfs, lyr.LimitInMillions, lyr.AttachmentInMillions); 上面的代码有一个相当明确的目的,我用一个复合键将值分组。 但是,此代码将失败,因为字典最初为空,而+ =运算符将不知道在0处启动存储桶。 我能想到的最好的是: public V AddOrSet(this Dictionary dict, K key, V value) { if( dict.ContainsKey(key) ) dict[key] += value; else dict[key] = value; } 但是,当然,即使这样也无法编译,因为没有办法限制V的类型,使得运算符+=存在。 规则 只有一次迭代通过double for循环。 在使用0值初始化字典之前,不允许循环一次。 可以使用辅助方法或扩展方法,但我希望内循环是一个衬里。 尽可能通用和可重用,这样我就不需要为不同类型(小数,整数等)的类似存储创建一堆相同的函数。 作为参考 – 在类的其他地方,键被定义为一个实际的元组(只有命名参数),这就是为什么它可以用作字典键: […]

将具有相同键的多个词典组合成一个具有值总和的字典

INPUT 字典1 “a”,“1” “b”,“2” 字典2 “a”,“3” “b”,“4” 字典3 “a”,“5” “b”,“6” 输出(上面的词典的连接) 最后的字典 “a”,“9” “b”,“12” 我写了一个伪代码: 创建一个Final空字典。 循环遍历词典列表。 遍历KeyValue对。 检查密钥是否存在于最终字典中。 如果是,则将KeyValue对中的值添加到final字典中。 如果没有,则将KeyValue对添加到字典中 由于这需要两个foreach循环,因此c#中有一个lync版本,并且不会抛出任何exception。 我在stackoverflow上提到的一些问题是将多个字典合并为一个字典

从词典中组合“检查添加或提取”

我厌倦了这个字典成语: Dictionary Contacts; //… if (!Contacts.ContainsKey(id)) { contact = new Contact(); Contacts[id] = contact; } else { contact = Contacts[id]; } 如果有一种语法允许从默认构造函数隐式创建新值,如果它不存在(字典知道值的类型,毕竟),那将是很好的。 有人看过帮助者(例如扩展方法)吗?

当对象属性和字典键名不同时,如何将对象/类属性映射到字典?

我正在调用Bloomberg Server API(用于股票市场数据)并将数据恢复到Dictionary其中字典的Key是Bloomberg一侧的Field Name ,该对象包含来自Bloomberg的数据值,可以是string , decimal , DateTime , boolean等。 获得Bloomberg数据后,我需要使用返回的值填充强类型实体/类。 根据我在对bloomberg的请求中发送的字段名称,返回的字典可以具有不同的键值。 我遇到的问题是, bloomberg字段名称和我的.net实体的属性名称不匹配 ,所以我不确定我是否可以使用AutoMapper或类似的库进行此映射。 我也尝试使用Tuple ,其中第一个元组项是bloomberg字段名,第二个元组项是我的实体的属性名,第三个元组项是从bloomberg返回的数据值。 这也没有成功(到目前为止),所以我想知道是否有一种简单的直接方式来维护这个bloombergfield EntityProperty映射并使用相应字段的Bloomberg数据值填充实体的值。 Generic(即使用C#Generics)解决方案会更好! 我已粘贴下面的示例控制台应用程序代码,因此您可以将其粘贴并试用。 2个字典,1个用于stockdata ,其他用于bonddata有假数据,但你明白了。 我还在下面添加了评论来重新迭代我想要完成的任务。 谢谢!! namespace MapBBFieldsToEntityProperties { using System; using System.Collections.Generic; class Program { public class StockDataResult { public string Name { get; set; } public decimal LastPrice { get; set; } public […]

Dictionary ContainsKey并在一个函数中获取值

有没有办法调用Dictionary一次来找到一个键的值? 现在我正在打两个电话。 if(_dictionary.ContainsKey(“key”) { int _value = _dictionary[“key”]; } 我想这样做: object _value = _dictionary[“key”] //but this one is throwing exception if there is no such key 如果没有这样的密钥或者通过一次调用获取值,我会想要null吗?

使用LINQ和LINQ扩展计算Dictionary中的值

我有一个字典看起来像这样: Dictionary<String, List> test1 : 1,3,4,5 test2 : 2,3,6,7 test3 : 2,8 如何使用LINQ和LINQ扩展计算所有值?

为什么我不能在C#中定义不区分大小写的字典?

这个C#/ WPF代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace TestDict28342343 { public partial class Window1 : Window { public Window1() { InitializeComponent(); Dictionary variableNamesAndValues = new Dictionary(StringComparison.InvariantCultureIgnoreCase); } } } 给我错误 : ‘System.Collections.Generic.Dictionary.Dictionary(System.Collections.Generic.IDictionary)’的最佳重载方法匹配有一些无效的参数 然而,我在这里和这里找到了这个代码示例。 如何定义其键不区分大小写的字典?

从值获取键 – Dictionary <string,List >

我通过指定值来获取密钥时遇到问题。 我能做到这一点的最佳方式是什么? var st1= new List { “NY”, “CT”, “ME” }; var st2= new List { “KY”, “TN”, “SC” }; var st3= new List { “TX”, “OK”, “MO” }; var statesToEmailDictionary = new Dictionary<string, List>(); statesToEmailDictionary.Add(“test1@gmail.com”, st1); statesToEmailDictionary.Add(“test2@gmail.com”, st2); statesToEmailDictionary.Add(“test3@gmail.com”, st3); var emailAdd = statesToEmailDictionary.FirstOrDefault(x => x.Value.Where(y => y.Contains(state))).Key;

字典与项目限制

我需要提供对跨会话的所有用户持久存储的键/值对存储的访问。 我可以轻松地为此创建单例,但出于性能原因,我想将字典的大小限制为10000个项目(或任何高性能数字,因为对象将无限期地持续存在) 是否有一种字典forms,我可以指定存储对象数量的限制,当超过该限制时,删除最旧的条目?