单位转换的良好数据结构?

riw*_*alk 7 software-design data-structures

StackOverflow人群.我有一个非常开放的软件设计问题.

我一直在寻找一个很好的解决方案,我想知道这里是否有人对问题有一些了解.认为这就像数据结构之谜.

我想要做的是创建一个能够从任何单位转换到任何单位的单位转换器.假设lexing和解析已经完成.一些简单的例子:

Convert("days","hours")           // Yields 24
Convert("revolutions", "degrees") // Yields 360
Run Code Online (Sandbox Code Playgroud)

为了使事情变得更复杂,它必须平滑地处理输入之间的歧义:

Convert("minutes","hours")        // Yields (1/60)
Convert("minutes","revolutions")  // Yields (1/21600)
Run Code Online (Sandbox Code Playgroud)

为了使事情变得更有趣,它必须处理复杂的单元而不需要枚举所有可能性:

Convert("meters/second","kilometers/hour")
Convert("miles/hour","knots")
Convert("Newton meters","foot pounds")
Convert("Acre feet","meters^3")
Run Code Online (Sandbox Code Playgroud)

没有正确或错误的答案,我正在寻找有关如何实现这一目标的想法.总是有一个强力解决方案,但我想要一些简单且可扩展的优雅.

Bwm*_*mat 0

我首先为每个数量选择一个标准单位(例如,长度为米,力为牛顿等),然后将所有转换因子存储在表中

然后,例如,从天到小时,您可以找到每天秒数和每小时秒数的转换因子,然后将它们相除以找到答案。

为了避免歧义,每个单位都可以与它测量的所有数量类型相关联,并且为了确定要进行哪种转换,您将取这两组类型的交集(如果您剩下 0 个或多个类型,您可以会吐出一个错误)