在 Dart 中使用 List 作为 map 中的键

这是我的飞镖代码

var mp = new Map();
  mp[[1,2]] = "Hi";
  mp[[3,5]] = "sir";
  mp.remove([3,5]);
  print(mp);

这里的输出为空

我如何访问 mp[[3,5]] 的值?

stack overflow Using List as a key in map in Dart
原文答案
author avatar

接受的答案

Dart 中包含相同元素的两个列表实例不相等。这就是您的示例不起作用的原因。

如果您想创建一个像您的示例一样工作的 Map ,您可以使用 LinkedHashMap 中的 dart:collection (在使用 Map() 时基本相同)创建一个具有自己定义的实例键相等意味着什么以及如何为键计算 hashCode

因此,如果列表包含相同顺序的相同元素,则如果您希望键相等,则类似这样。需要注意的是它不支持嵌套列表:

import 'dart:collection';

void main() {
  final mp = LinkedHashMap<List<int>, String>(
    equals: (list1, list2) {
      if (list1.length != list2.length) {
        return false;
      }

      for (var i = 0; i < list1.length; i++) {
        if (list1[i] != list2[i]) {
          return false;
        }
      }

      return true;
    },
    hashCode: Object.hashAll,
  );

  mp[[1, 2]] = "Hi";
  mp[[3, 5]] = "sir";
  mp.remove([3, 5]);
  print(mp); // {[1, 2]: Hi}
}

我还应该补充一点,这确实是一种使用地图的低效方式,我强烈建议不要使用 List 作为地图中的键。


答案:

作者头像

您添加一个列表实例作为 Map 对象的键。您需要相应的列表实例再次删除它。

有两种访问方式

第一的;

  final mp = {};
  mp[[1,2]] = "Hi";
  mp[[3,5]] = "sir";
  mp.removeWhere((key, value) {
    if(key is List){
      return key.first == 3 && key[1] == 5;
    }
    return false;
  });

第二;

  final mp = {};
  final key = [3, 5];
  mp[[1,2]] = "Hi";
  mp[key] = "sir";
  mp.remove(key);
作者头像

地图国家 = {

"01": "美国",

"02": "英国",

“03”:“中国”,

“04”:“印度”,

"05": "巴西",

"06": "尼泊尔",

“07”:“俄罗斯”

};

//方法一:

var _key = countries.keys.firstWhere((k)
      => countries[k] == 'Russia', orElse: () => null);

打印(键); //输出:07