首页 > 解决方案 > 在 Dart 中编写计算

问题描述

我正在尝试编写一个计算功能。

我有一个看起来像这样的列表

List<Map> sections = [
  {
     "alias": "sectionOne",
     "children": [
         {
            "alias": "sectionOne",
            "fields": [
             {
              "name": "fieldOne",
              "value": 10
             },
            {
             "name": "fieldThree",
             "value": 10
             },
             {
               "name": "fieldFour",
              "value": 20
            },
           ]
        }
     ],
     "fields": [
       {
        "name": "fieldOne",
        "value": 10
       },
       {
        "name": "fieldThree",
        "value": 10
       },
       {
        "name": "fieldFour",
        "value": 20
       },
     ]
  },
  {
     "alias": "sectionTwo",
     "fields": [
       {
        "name": "fieldTwo",
        "value": 10
       },
       {
        "name": "fieldSeven",
        "value": 9
       },
     ]
  }
];

我有一个看起来像这样的字符串,=([sectionOne:fieldOne]*[sectionTwo:fieldTwo])*[sectionOne:fieldThree]请记住这个字符串可以有更多的部分和字段。

我需要获取每个部分和字段的值,然后在运行计算时牢记 BODMAS。

请有任何建议。

编辑:

不幸的是,规范略有变化,他们希望包含诸如 SUM() 之类的关键字,这里还有一个示例 =([sectionOne:fieldOne]*[sectionTwo:fieldTwo]) * sum([sectionOne:fieldThree]) 基本上每个部分有一个名为 children 的子列表,并且子列表中存在相同的字段,我可以编写代码来总结它们的值,只是不知道如何检查关键字 sum' 是否是 match.group` 的一部分,任何请问有什么建议吗?

谢谢

标签: dartcalculation

解决方案


你可以使用这个:

print(sections
      .map((section) =>
          section['fields'].map((field) => field['value']).toList())
      .toList());
// OUTPUT
// [[10, 10], [10]]

或者,从 Dart 2.3 开始:

print([
    for (var section in sections)
      [for (var field in section['fields']) field['value']]
]);

如果您需要一个包含所有值的数组:

print([
    for (var section in sections)
      for (var field in section['fields']) field['value']
]);
// OUTPUT
// [10, 10, 10]

要获得数组元素的乘积:

print([10, 10, 10].reduce((a, b) => a * b));

// OUTPUT
// 1000

推荐阅读