Tag: 哈希表

是否可以对HashTable进行排序?

我有一个返回HashTable的属性。 我想在不重构我的财产的情况下对其进行排序。 请注意 :我不想退回其他类型。 码: /// /// All content containers. /// public Hashtable Containers { get { Hashtable tbl = new Hashtable(); foreach (Control ctrl in Form.Controls) { if (ctrl is PlaceHolder) { tbl.Add(ctrl.ID, ctrl); } // Also check for user controls with content placeholders. else if (ctrl is UserControl) { foreach (Control ctrl2 in […]

Hashtable / Dictionary碰撞

仅使用标准英文字母和下划线,可以最多使用多少个字符,而不会在哈希表/字典中引起潜在的冲突。 所以字符串如: blur Blur b Blur_The_Shades_Slightly_With_A_Tint_Of_Blue …

将hashtable.Keys转换为List 或其他IEnumerable

我知道,我有其他选择,例如我可以维护一个单独的键列表。 请不要提出其他选择。 我只是想知道我是否可以解决这个问题。 请不要问我正在尝试解决的问题,或类似的问题。 这是一个纯粹而简单的CS问题。 我想知道是否有人知道从Hashtable获取密钥的方法并将它们转换为List或其他类型的IEnumerable (当然,我的密钥实际上是整数)。 鉴于我可以毫无问题地做到这一点: foreach (int key in hashtable.Keys) 为什么这会给我带来错误? (List)hashtable.Keys

.NET Dictionary实现如何与可变对象一起使用

我知道不建议使用“可变”对象(GetHashCode()方法在将它们用作Dictionary中的键时可以返回不同结果的对象)。 下面是我对作为哈希表实现的字典如何工作的理解: 当我添加新密钥时,例如dict.Add(m1, “initially here was m1 object”); , dict使用GetHashCode()方法计算m1的哈希码。 然后它进行一些内部计算,最后将此对象放入其内部数组的某个位置。 当我使用键索引来获取值时,例如dict[m1] , dict再次计算哈希码。 然后它做了一些内部计算,它给了我一个对象,它位于其内部数组内部的计算位置。 但我认为有一个我无法找到的错误。 所以我们假设我有这个代码: class MutableObject { Int32 m_value; public MutableObject(Int32 value) { m_value = value; } public void Mutate(Int32 value) { m_value = value; } public override int GetHashCode() { return m_value; } } static void Main(string[] args) { MutableObject m1 […]

C#Dictionary 和可变键

有人告诉我,在C#规范中字符串变为不可变的众多原因之一是为了避免在对字符串键的引用改变其内容时HashTables的密钥发生变化的问题。 Dictionary 类型允许将引用类型用作键。 字典如何避免导致“错位”值的更改密钥问题? 当用作键时,是否存在由对象构成的成员克隆?

使用ToDictionary构建排序字典

我不是C#和LINQ的专家。 我有一个Dictionary ,我理解一个哈希表,也就是说,键没有排序。 dataBase = new Dictionary() Record是一个用户定义的类,它包含给定键字符串的大量数据。 我发现了一个有趣的例子,它通过LINQ将这个Dictionary转换为一个排序的字典: var sortedDict = (from entry in dataBase orderby entry.Key ascending select entry) .ToDictionary(pair => pair.Key, pair => pair.Value); 此代码正常工作。 生成的sortedDict按键排序。 问题 :我发现sortedDict仍然是一个哈希表,类型为: System.Collections.Generic.Dictionary 我期望得到的字典应该是C ++ STL中的一种map ,它通常被实现为(平衡的)二叉树以维持密钥的排序。 但是,生成的字典仍然是哈希表。 sortedDict如何维护排序? 哈希表不能保存键的顺序。 C#的Generic.Dictionary的实现是否只是典型的哈希表?

C# – 将json格式的数据解析为嵌套的哈希表

我正在尝试使用C#中的一些json格式化数据,但是,我在确定解决问题的正确方法时遇到了一些问题。 我的问题是json格式的数据将采用未知格式(我知道这听起来很奇怪……请继续阅读)。 基本上,json格式的数据将是一些名称/值对的集合,其中值可能是也可能不是嵌套名称/值对的数组。 为了使事情变得更有趣,名称/值对数组的嵌套可以无限制地继续。 例如:我可能有一些看起来像……的数据 { “1”: { “1.1”: { “1.1.1”: “value1”, “1.1.2”: “value2”, “1.1.3”: “value3” }, “1.2”: “value4”, “1.3”: { “1.3.1”: { “1.3.1.1”: “value5”, “1.3.1.2”: “value6” }, “1.3.1.2”: “value7”, “1.3.1.3”: “value8” } } } 不幸的是,我不知道将要发生多少嵌套,从技术上讲,我不知道在任何给定的消息中将出现什么名称/值对。 C#中是否有任何支持的机制可以让我轻松地将其解析为嵌套的hastables集合? 我想做一些事情(注意这段代码不是100%语法正确,最好通过递归来完成……但是它的想法是完整的)。 Hashtable ht = [deserialize data method](jsonformattedstring); foreach (Hashtable nested in ht) { If (nested.count > 1) { […]

如何在linq中使用方法

我有课程: class SomeClass { public string Name{get;set;} public int SomeInt{get;set;} } class SomeComparison: IEqualityComparer { public bool Equals(SomeClass s, SomeClass d) { return s.Name == d.Name; } public int GetHashCode(SomeClass a) { return (a.Name.GetHashCode() * 251); } } 我还有两个名为list1和list2大型List 在我以前有: var q = (from a in list1 from b in list2 where a.Name != b.Name […]

Hashtable to Dictionary syncroot。

Hashtables具有syncroot属性,但通用字典不具备。 如果我有代码执行此操作: lock (hashtable.Syncroot) { …. } 如果我删除哈希表并更改为通用词典,我该如何复制?