管理 .NET 字典中的重复键
管理字典中的重复键是许多编程场景中的常见挑战。在 .NET 基类库中,字典通常对键强制执行唯一性约束,禁止存储与同一键关联的多个值。但是,有一些方法可以克服此限制并在某些情况下容纳重复的键。
使用自定义类
一种方法是创建一个自定义字典类,该类允许重复的键。正如问题中提到的,像 Dictionary
.NET 3.5 及更高版本中的 Lookup 类
如果您使用的是 .NET 3.5 或更高版本, Lookup 类提供了更优雅的解决方案。 Lookup 类是一个泛型类型,它创建键及其对应值的集合。重要的是,它允许重复的键并对与同一键关联的值进行分组。
您可以使用 Enumerable.ToLookup 扩展方法创建 Lookup 实例。此方法采用一系列键值对并返回一个 Lookup,其中键作为主键,值存储在各自的集合中。
var lookup = sequence.ToLookup(keySelector, valueSelector);
例如,以下代码从字典,其中键是字符串,值是整数列表:
var dictionary = new Dictionary<string, List<int>> { { "key1", new List<int> { 1, 2 } }, { "key2", new List<int> { 3, 4 } } }; var lookup = dictionary.ToLookup(x => x.Key, x => x.Value);
一旦您拥有 Lookup 实例,您就可以使用 [] 访问与键关联的值运算符或 GetValues 方法。 [] 运算符返回值列表,而 GetValues 返回 IEnumerable
Lookup 类的限制
需要注意的是 Lookup 类是不可变的。创建后,您无法添加或删除键或值。但是,您可以创建一个包含所需更改的新 Lookup 实例。此外,Lookup 类不支持并发修改。如果需要并发访问,请考虑使用 ConcurrentDictionary。
结论
虽然 .NET 基类库没有提供明确支持重复的内置字典类型键,.NET 3.5 及更高版本中的 Lookup 类提供了一种方便高效的解决方案,用于分组和检索与重复键关联的值。
以上是如何管理 .NET 字典中的重复键?的详细内容。更多信息请关注PHP中文网其他相关文章!