Tag: 字典

如何从重新实现GetHashCode的类中获取原始哈希代码?

简短问题:如何获取已重新实现GetHashCode()的对象的object.GetHashCode()值? 长话:所以我有大约十万个对象,每个对象共享许多(非编译时)常见字符串。 常见,如果值相等,则它是相同的实例。 知道这一点,我想我宁愿使用标准对象比较( ReferenceEquals )而不是完整的字符串比较 – 特别是因为这些是在相当规律的基础上在字典中查找的。 所以我声明了一个class ReferenceEqualityComparer : IEqualityComparer与Dictionary ,认为无论如何都要有用,并且尝试实现这两种方法。 等于很容易,使用object.ReferenceEquals 。 但是如何获得GetHashCode方法的object.GetHashCode()等价物呢? 即如何获得对象实例的一些表示? 我知道还有其他方法可以做到这一点 – 创建一个InternedString类,它保存对string的引用,但不实现Equals或GetHashCode ,或者存储索引而不是每个对象的字符串,但我现在很好奇 -实际上有一种实现通用ReferenceEqualityComparer吗?

使用C#为字典中的一个键添加多个位图值

我有一个字典存储模式图像用于OCR目的。 我从字典中抓取这些位图并将其与我从图像中裁剪的位图进行比较,如果它们匹配=>抓住了密钥(OCR部分已完成)。 问题出现在这里。 一个密钥应该由几个不同的位图(即值)表示。 如何在字典中添加多个位图来表示相同的密钥? 这就是我使用字典的方式: Dictionary lookup = new Dictionary(); lookup.Add(“A”, new Bitmap(@”C:\08\letters\1\a1.bmp”, true)); lookup.Add(“A”, new Bitmap(@”C:\08\letters\1\a2.bmp”, true)); // Error will be here, because key A already exists for one Bitmap value. lookup.Add(“a”, new Bitmap(@”C:\08\letters\1\aa1.bmp”, true)); lookup.Add(“B”, new Bitmap(@”C:\08\letters\1\b1.bmp”, true)); 现在,抓住图像和价值,我做了以下: var target = lookup.ToList(); bitmap b1 = target[j].Value; //grab value //if value = […]

比较两个Dictionary 的最佳方法是否相等

这是为两个字典的平等创建比较器的最佳方法吗? 这需要准确。 请注意,Entity.Columns是KeyValuePair的字典(字符串,对象): public class EntityColumnCompare : IEqualityComparer { public bool Equals(Entity a, Entity b) { var aCol = a.Columns.OrderBy(KeyValuePair => KeyValuePair.Key); var bCol = b.Columns.OrderBy(KeyValuePAir => KeyValuePAir.Key); if (aCol.SequenceEqual(bCol)) return true; else return false; } public int GetHashCode(Entity obj) { return obj.Columns.GetHashCode(); } } 关于GetHashCode实现也不太确定。 谢谢!

任何人都可以解释为什么C#中的Dictionary 不像STL中的map 那样工作?

去年我第一次开始使用C#编程时,我立即寻找了与STL相同的地图,并学习了Dictionary。 更新了下面的垃圾,我完全错了。 我对STL地图的体验是,当我向它请求值时,我讨厌,如果键不在地图中,它会自动创建值类型(无论其默认构造函数如何)并将其添加到地图中。 我必须在代码中检查这个条件并抛出exception。 字典使整个shebang正确 – 如果键不存在,它会在您请求值时抛出异常,或者如果不是,则自动添加它并且您想要设置该值。 但你们都已经知道了。 我应该在发布之前编写我的unit testing并让自己感到尴尬。 :)他们现在写的! 现在我喜欢Dictionary和all,但是现在最让我烦恼的是,如果键不在Dictionary中,它会抛出KeyNotFoundException。 因此,我总是需要编写这样的代码: Dictionary _mydic; public string this[string key] { get { return _mydic[key]; // could throw KeyNotFoundException } set { if( _mydic.ContainsKey( key)) _mydic[key] = value; else _mydic.Add( key, value); } } 如果键不存在,为什么Dictionary不会自动添加键值对,如STL的映射? 现在有趣的是,在以前的生活中,我曾经生气,因为我经常不得不试图阻止地图这样做。 我想我现在的用例有点不同。

Umbraco 7使用语言/词典

我们的项目终于到了可以添加翻译的地步。 我似乎无法弄清楚如何在Umbraco 7中实际使用语言。我在后端添加了一种语言和一些字典项,但是如何在我的代码中选择给定语言? 是否有任何助手可以在API中获得翻译? 像DictionaryHelper.Translate(“Answers”,“da-DK”); ? 还是类似的? 有没有办法在启动控制器中设置语言等,并且总是从字典中获取该语言? 提前致谢。 乔纳斯。

将带有List的字典转换为IEnumerable

我有一本字典: Dictionary<String, List> test = new Dictionary<String, List>(); 然后我填充这个字典,因此我需要列表,所以我可以调用Add()。 我的问题是函数需要返回: Dictionary<String, IEnumerable> 有没有简单的方法可以做到这一点,而不是通过我的原始字典和手动循环显而易见的循环?

如何正确使用IReadOnlyDictionary?

来自msdn : 表示键/值对的通用只读集合。 但请考虑以下事项 class Test { public IReadOnlyDictionary Dictionary { get; } = new Dictionary { { “1”, “111” }, { “2”, “222” }, { “3”, “333” }, }; public IReadOnlyList List { get; } = (new List { “1”, “2”, “3” }).AsReadOnly(); } class Program { static void Main(string[] args) { var test […]

Json序列化字典的问题

每当我尝试序列化字典时,我都会得到exception: System.ArgumentException: Type ‘System.Collections.Generic.Dictionary`2[[Foo.DictionarySerializationTest+TestEnum, Foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]’ is not supported for serialization/deserialization of a dictionary, keys must be strings or object 我的测试用例是: public class DictionarySerializationTest { public enum TestEnum { A, B, C } //tried with numbers, too: public enum TestEnum { A = 1, B = 2, C = […]

为什么Lookup在C#中是不可变的?

与Dictionary不同,您无法通过逐个添加元素来构建Lookup 。 你碰巧知道原因吗? Lookup就像C ++中的multimap一样; 为什么我们不能在C#中修改它? 如果我们真的不能,我们如何在C#中构建multimap数据结构?

无法将keyValuePair直接添加到Dictionary

我想将KeyValuePair到Dictionary ,但我不能。 我必须分别传递密钥和值,这必然意味着Add方法必须创建一个新的KeyValuePair对象来插入,这不是非常有效。 我不敢相信Add方法上没有Add(KeyValuePair)重载。 任何人都可以提出这种明显疏忽的可能原因吗?