flutter - 显示列表时避免多个具有相同值的数据
问题描述
我有一张带有如下数据的地图
Map map = {{'data1': 500}, {'data2': 200}, {'data3': 750}, {'data4': 200}}
然后我使用 MapEntry 显示它
for (MapEntry<String, num> value in mapList.entries)
Column(children: <Widget>[
Text(value.key),
Text(value.value)
]
我如何显示它通过升序根据值排序,并避免显示具有相同值的多个数据
示例输出
data2 / data4
200
data1
500
data3
750
解决方案
我会正确使用 aSplayTreeMap
并切换键和值。像这样的东西:
import 'dart:collection';
void main() {
final list = [
{'data1': 500},
{'data2': 200},
{'data3': 750},
{'data4': 200}
];
final sortedMap = SplayTreeMap<int, List<String>>();
for (final entry in list) {
sortedMap
.putIfAbsent(entry.entries.first.value, () => [])
.add(entry.entries.first.key);
}
for (final entry in sortedMap.entries) {
print('${entry.value.join(' / ')}');
print(entry.key);
}
// data2 / data4
// 200
// data1
// 500
// data3
// 750
}
将SplayTreeMap
自动对映射中的值进行排序,因此在这里使用您的 int-number 作为键然后保存具有相同数值的键key
是有意义的。List<String>
推荐阅读
- dialogflow-es - 在 Dialogflow Essentials 中重新提示用户输入
- python - 凭据过期时如何重新发送 cognito 邀请
- ansible - 如何包含角色(vars)目录中的变量?
- excel - 在 Excel 中调用时返回运行时错误 '438 的 Word 函数
- ionic-framework - 无法添加名称为“googleServices”的扩展程序,因为已使用该名称注册了一个扩展程序。- 离子电容器
- android - 将 Android 项目转移到 Git 私有服务器
- angular - 使用 Angular 和 JWT 令牌持续登录
- odk - ODK - 根据选择显示值
- c# - 使用 BsonClassMap 时获取 MongoDB 中插入文档的 _id?
- node.js - 无法接收从 redis 服务器内部触发的 socketio 发射