【发布时间】:2023-04-09 11:32:01
【问题描述】:
现在,在你骂我之前,我知道有一个非常类似的问题:
Best data structure for two way mapping?
事实上,我正在寻找一种能够完成同样事情的数据结构。具体来说,我有一个字符串应该映射到另一个字符串,而另一个字符串也应该映射到原始字符串。
例如:
".jpg" -> "image/jpeg"
"image/jpeg" -> ".jpg"
链接的问题建议使用某种哈希图或Dictionary<string,string> 来完成此操作。
一个自定义数据类型将包含两个字典,每个字典是一种映射方式。这将提供 O(1),但我发现它根本无法扩展。
考虑到我有一个字典,其中包含从 200 个 MIME 类型到相关文件扩展名的所有映射,我需要创建一个类似的字典,其内容相同但相反。这很容易出现拼写错误或缺少键,并且是大量重复代码。
虽然链接的问题是针对 Java 中的解决方案,但我正在寻找 C# 中的解决方案。
是否有支持对象之间这种双向映射的 .NET 数据结构?
如果没有,我如何在不复制代码的情况下完成此操作(如在两个字典解决方案中)?
【问题讨论】:
-
理论上你想要
dictionary.Add(".jpg", "image/jpg")之类的东西,并且能够将它用作var mime = dictionary[".jpg"]和var ext = dictionary["image/jpg"]? -
似乎毫无意义,因为您仍然会明确映射这些关系......
-
@BrettCaswell 我手动创建地图没有问题。但是,我不想创建两次地图
-
有时简单更好;假设查找的内容是运行时静态的,使用代码生成获取源并创建正常/反向字典。
-
我不知道你的代码会有多抽象,但这种模式对我来说是不可取的:我将提供一种 linq 方法。
标签: c# data-structures types mapping