使用值从.net哈希表中删除项目

时间:2012-10-31 20:47:09

标签: c# .net hashtable

有没有办法不循环遍历整个哈希表来删除具有指定值的键值对?

如果没有 - 是否有更好的类型可以让我这样做?

这里有一些关于我正在做什么的背景知识。我确定我过于复杂,而且有更好的方法......

我有一个键/值列表,其中键是“源”电子表格中的列名,值是“目标”系统中的字段名称。

当我遍历“source”中的列并匹配哈希表中的键时,我可以删除它们。

一旦完成,“源”中可能会有列,而哈希表中没有匹配的键。用户可以通过选择其中一个剩余值来覆盖它。

这时我需要从哈希表中删除该键/值。

3 个答案:

答案 0 :(得分:5)

  

有没有办法不循环遍历整个哈希表来删除具有指定值的键值对?

没有。哈希表的重点在于它可以通过快速查找,而非值。

请注意,您通常应该使用Dictionary<TKey, TValue>,除非您使用.NET 1.1

  

如果没有 - 是否有更好的类型可以让我这样做?

如果您将拥有唯一值以及唯一键,则可以只使用两个词典,每个词一个。然后,您可以查找与相关值对应的键,并通过键从两个词典中删除。

答案 1 :(得分:5)

不,没有。

如果你想这样做,通常意味着两件事之一

  1. 您的键和值已反转。将您的价值观和钥匙作为您的价值观。

  2. 您需要两本词典。一个Dictionary<T1, T2>和一个Dictionary<T2,T1>。您需要填充它,以便每对都在两个字典中并且是一致的。它还意味着每个值都是唯一的,而不仅仅是键。如果您当前的值不是唯一的,那么您需要Dictionary<T2, List<T1>>或类似的东西,因为每个值都可能映射到多个键。这样做也会使你的结构更难维护。 (如果您需要,请考虑制作新的TwoWayDictionary类型。)

答案 2 :(得分:-1)

HashTable类实现IEnumerable,因此您可以使用查询(LINQ)而不是迭代