从 Modelica 中的字符串参数访问数组元素

Access array elements from string argument in Modelica

我在 Modelica 中有一个任务,在一个函数中,我想根据给定的 string 类型参数读出 record(参数)的值,类似于dictionary 输入 Python.

例如我有一个包含不同介质系数的记录,我想读出甲烷的系数,所以我的参数是 string "Methane".

直到现在,我通过在我的系数记录中提供第二个 array 来解决这个问题,该记录将媒体名称存储在 strings 中。我在 for 循环中解析这个数组以匹配请求的媒体名称,然后使用找到的索引访问系数数组。

这显然非常复杂,会导致很多混乱的代码和嵌套的for循环。难道没有更方便的方式,比如 Python 以其 dictionary 类型呈现,其中 string 直接链接到一个值?

感谢您的帮助!

您可以使用多种不同的替代方法。我会添加我最喜欢的模式:

model M
  function index
    input String[:] keys;
    input String key;
    output Integer i;
  algorithm
    i := Modelica.Math.BooleanVectors.firstTrueIndex({k == key for k in keys});
  end index;
  constant String[3] keys = {"A","B","C"};
  Real[size(keys,1)] values = {1,2*time,3};
  Real c = values[index(keys,"B")] "Coefficient";
  annotation(uses(Modelica(version="3.2.1")));
end M;

我喜欢这段代码的原因是它可以通过 Modelica 编译器变得高效。您创建一个键向量和一个相应的数据向量。它不是记录的原因是您希望键向量保持不变,并且值可能会随时间变化(对于比您想要的更通用的字典)。

然后编译器可以为您要从中查找的任何常量名称创建一个常量索引。这使得编译器中的排序和匹配更好(因为没有未知索引)。如果您想在 运行 时查找某个密钥,该代码也适用于此。