我基本上来自 JS 背景,现在正在尝试使用 Flutter 框架。我一直在格式化从 API 收到的数据。
数据接收到一组对象
[
{
"id": 1,
"name": "name1",
"type": "Both",
"count": 4
},
{
"id": 2,
"name": "name2",
"type": "Both",
"count": 6
},
{
"id": 3,
"name": "name1",
"type": "Both",
"count": 2
},
{
"id": 4,
"name": "name3",
"type": "Both",
"count": 8
},
......
]
Run Code Online (Sandbox Code Playgroud)
我的要求是我必须根据名称对数据进行分组
{
name1: [
{
"id": 1, "name":"name1", "type": "Both", "count": 4
},
{
"id": 3, "name":"name1", "type": "Both", "count": 2
}
],
name2: [
{
"id": 2, "name":"name2", "type": "Both", "count": 6
}
],
.....
}
Run Code Online (Sandbox Code Playgroud)
在 dart 中,我设法使用 collections.dart 包中的 groupBy 进行分组。
问题是我无法遍历分组数据。我需要访问计数以对每个分组名称进行一些操作。
下面是我试过的代码剪断
Map data;
List partySnapData;
Map newMap;
Future _getTopParties() async {
final response =await http.get(API_URL + '/getPartySnapShot');
data =json.decode(response.body);
partySnapData = data['resultObj'];
setState(() {
newMap = groupBy(partySnapData, (obj) => obj['party_name']);
for(var v in newMap.values) {
print(v);
}
});
Run Code Online (Sandbox Code Playgroud)
}
print(v) 实际上给了我映射到地图 EG 的值
[
{ "id": 1, "name":"name1", "type": "Both", "count": 4 },
{ "id": 3, "name":"name1", "type": "Both", "count": 2 }
],
.....,
......
Run Code Online (Sandbox Code Playgroud)
现在,我如何循环或迭代数组,这里是v,以便我可以访问里面的元素?
Dpe*_*nha 19
忽略您的具体案例,但回答问题,以防其他人像我在搜索时遇到这个问题How to iterate through map values in dart / flutter。
有一种更简单、更好的方法。
这是最好的方法(因为这样您可以break在for loop找到正确的条目并执行您必须执行的操作以避免不必要的迭代之后)。
for (MapEntry<type, type> item in myMap.entries) {
//Here each item has a key and a value proterties.
//Don't forget to use break; to end the loop when you are done and avoid unnecessary iterations.
}
Run Code Online (Sandbox Code Playgroud)
这是更简单的:
myMap.forEach((key, value) {
//Here you have key and value for each item in your map but you can't break the loop
//to avoid unnecessary iterations.
//This approach is only useful when you need to perform changes in all Map items.
});
Run Code Online (Sandbox Code Playgroud)
小智 7
我找到了解决方案。我张贴那个,以防它帮助某人。
我想遍历 v 以生成对象。
newMap = groupBy(partySnapData, (obj) => obj['party_name']);
for(var v in newMap.values) {
print(v);
//below is the solution
v.asMap().forEach((i, value) {
print('index=$i, value=$value');
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14628 次 |
| 最近记录: |