Dart 中具有重复键的 Map 实现

flu*_*ter 4 dart

我想要一张带有重复键的地图。Dart 中是否有这样的映射或具有此功能的实用程序库?

\n

我正在使用以下方法获取项目数:

\n
myList.forEach(\n      (element) {\n        if (!myMap.containsKey(element)) {\n          myMap[element] = 1;\n        } else {\n          myMap[element] += 1;\n        }\n      },\n    );\n
Run Code Online (Sandbox Code Playgroud)\n

然后将键/值转换为列表:需要切换键/值...

\n
final keys = myMap.keys.toList();\nfinal itemSpit = keys.map((e) => e.toString().split('\xc2\xa7\xc2\xba')).toList();\nfinal values = myMap.values.toList();\n
Run Code Online (Sandbox Code Playgroud)\n

把它放在地图上

\n
final map = Map();\n\n    for (var i = 0; i < values.length; i++) {\n      map[values[i]] = itemSpit[i];\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

显然,这些键在 for 循环中被覆盖。

\n

然后\niterate over map(将键/值放入flutter小部件中)

\n
final cells = map.entries\n        .map((e) => ........\n
Run Code Online (Sandbox Code Playgroud)\n

如果存在重复值,第一种方法会增加值计数。所以我有这个。... {breadwhitelarge: 3, cornyellowsmall:5 ..etc..}

\n

然后我必须分割字符串并得到这样的输出

\n
5 bread white large\n3 corn yellow small\n
Run Code Online (Sandbox Code Playgroud)\n

jul*_*101 12

Map<K,List<V>>您可以创建一个类似以下示例的映射,而不是定义允许重复键的映射:

void main() {
  final map = <String, List<int>>{};

  addValueToMap(map, 'Test 1', 1);
  addValueToMap(map, 'Test 1', 2);
  addValueToMap(map, 'Test 2', 3);
  addValueToMap(map, 'Test 1', 4);
  addValueToMap(map, 'Test 2', 5);
  addValueToMap(map, 'Test 3', 6);

  print(map); // {Test 1: [1, 2, 4], Test 2: [3, 5], Test 3: [6]}
}

void addValueToMap<K, V>(Map<K, List<V>> map, K key, V value) =>
    map.update(key, (list) => list..add(value), ifAbsent: () => [value]);
Run Code Online (Sandbox Code Playgroud)

然后,您可以请求给定的键并获取与该键连接的所有值的列表。