使用String键进行Dart Map,与ignore case进行比较

Jon*_*llo 8 dart

如果键是字符串,Dart中的Map类是否有办法忽略大小写?

例如.

var map = new Map<String, int>(/*MyComparerThatIgnoresCase*/);
map["MyKey"] = 42;
var shouldBe42 = map["mykey"];
Run Code Online (Sandbox Code Playgroud)

在C#中,Dictionary构造函数采用类似上面注释的比较器.Dart中这样做的规范方法是什么?

Mic*_*ick 6

Dart中的地图有一个内部方法,用于比较相等的键.据我所知,你不能为默认Map类改变它.但是,您可以使用非常相似的核心LinkedHashMap类,它不仅允许,而且还要求您指定密钥相等方法.您可以在https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:collection.LinkedHashMap上查看有关LinkedHashMaps的更多信息.

LinkedHashMap<String, String> map = new LinkedHashMap(
    (a, b) => a.toLowerCase() == b.toLowerCase(),
    (key) => key.toLowerCase().hashCode
);

map['Foo'] = 'bar';
print(map['foo']);   //bar
Run Code Online (Sandbox Code Playgroud)


lrn*_*lrn 5

HashMap使用自定义equals函数(以及相应的自定义hashCode函数)创建a的方法是使用HashMap构造函数上的可选参数:

new HashMap<String,Whatever>(equals: (a, b) => a.toUpperCase() == b.toUpperCase(),
                             hashCode: (a) => a.toUpperCase().hashCode);
Run Code Online (Sandbox Code Playgroud)

我真的,真的建议找到一种方法,不要在每次操作时都使用toUpperCase!