首页 > 解决方案 > 显示列表时避免多个具有相同值的数据

问题描述

我有一张带有如下数据的地图

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

标签: flutterdart

解决方案


我会正确使用 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>


推荐阅读