0

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

如果没有,我可以使用更好的类型来允许我这样做吗?

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

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

当我遍历“源”中的列并匹配哈希表中的键时,我可以删除这些对。

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

这就是我需要从哈希表中删除该键/值的地方。

4

3 回答 3

5

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

不,哈希表的关键在于它可以快速查找key,而不是 value。

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

如果没有,我可以使用更好的类型来允许我这样做吗?

如果您要拥有唯一值和唯一键,则可以只有两个字典,单向一个。然后您可以查找与相关值对应的键,并通过键从两个字典中删除。

于 2012-10-31T20:49:33.143 回答
5

不,那里没有。

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

  1. 您的键和值颠倒了。让你的价值观成为你的钥匙,让你的钥匙成为你的价值观。

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

于 2012-10-31T20:51:02.113 回答
-1

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

于 2012-10-31T20:50:01.277 回答