dart - 在 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` 的一部分,任何请问有什么建议吗?
谢谢
解决方案
你可以使用这个:
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
推荐阅读
- php - 从数组中获取第二个值
- android - 每次我在 PlacePicker 上更改位置时更新地图片段
- visual-studio-code - 如何通过编辑 tmLanguage.json 文件合并或包含两种不同的代码语法?
- php - 如何将php mysql查询重写为nodejs mysql查询
- ecmascript-6 - BindingIdentifier 和 IdentifierReference 有什么区别
- android - HOT 和 WARM 应用程序启动之间的区别
- c# - C# 在类中重复相同的字段名称以允许序列化为 JSON
- java - 将 GridLayoutManager 与 RecyclerView 一起使用时,单元格没有达到所需的高度
- python - Django TemplateDoesNotExist 在 /
- laravel - 未找到 Laravel + NGINX CSS/JS 404