有没有办法不循环遍历整个哈希表来删除具有指定值的键值对?
如果没有 - 是否有更好的类型可以让我这样做?
这里有一些关于我正在做什么的背景知识。我确定我过于复杂,而且有更好的方法......
我有一个键/值列表,其中键是“源”电子表格中的列名,值是“目标”系统中的字段名称。
当我遍历“source”中的列并匹配哈希表中的键时,我可以删除它们。
一旦完成,“源”中可能会有列,而哈希表中没有匹配的键。用户可以通过选择其中一个剩余值来覆盖它。
这时我需要从哈希表中删除该键/值。
答案 0 :(得分:5)
有没有办法不循环遍历整个哈希表来删除具有指定值的键值对?
没有。哈希表的重点在于它可以通过键快速查找,而非值。
请注意,您通常应该使用Dictionary<TKey, TValue>
,除非您使用.NET 1.1 。
如果没有 - 是否有更好的类型可以让我这样做?
如果您将拥有唯一值以及唯一键,则可以只使用两个词典,每个词一个。然后,您可以查找与相关值对应的键,并通过键从两个词典中删除。
答案 1 :(得分:5)
不,没有。
如果你想这样做,通常意味着两件事之一
您的键和值已反转。将您的价值观和钥匙作为您的价值观。
您需要两本词典。一个Dictionary<T1, T2>
和一个Dictionary<T2,T1>
。您需要填充它,以便每对都在两个字典中并且是一致的。它还意味着每个值都是唯一的,而不仅仅是键。如果您当前的值不是唯一的,那么您需要Dictionary<T2, List<T1>>
或类似的东西,因为每个值都可能映射到多个键。这样做也会使你的结构更难维护。 (如果您需要,请考虑制作新的TwoWayDictionary
类型。)
答案 2 :(得分:-1)
HashTable类实现IEnumerable,因此您可以使用查询(LINQ)而不是迭代