如果键是字符串,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中这样做的规范方法是什么?
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)
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!
归档时间: |
|
查看次数: |
1588 次 |
最近记录: |