Ant*_*REL 6 dictionary dart flutter
是否有任何类型的集合来声明具有链接到同一值的多个键的映射?
我希望地图在声明的同时进行初始化。理想情况下是这样的:
MyMap<String, String> mymap = {['red', 'blue', 'green'] : 'Rock', ['pink', 'yellow' ...etc}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在文档中找到了Multimap,但似乎它是一个键用于多个值,除此之外,我在实现时遇到了很多麻烦,因为尽管文档中给出了 0 个示例。
这是我到目前为止的尝试:
static Iterable mylist = ['red', 'blue', 'green']; // I want to associate these strings to 'Rock'
static Iterable mylist = ['pink', 'yellow', 'cyan']; // I want to associate these strings to 'Funk'
static Multimap<String,String> okayboomer = Multimap.fromIterable(mylist);//, {K key(dynamic element), V value(dynamic element)});
Run Code Online (Sandbox Code Playgroud)
然后每当我访问 OKBoomer['red'] 时,我都会得到“Rock”。
我也在考虑HashMap
强烈感谢任何帮助!
您不一定需要任何特殊的数据结构;一个法线Map可以有多个键具有相同的值,你只需要一个辅助函数来使其初始化更方便:
Map<String, String> makeMyMap(Map<List<String>, String> map) {
var newMap = <String, String>{};
for (var entry in map.entries) {
var keyList = entry.key;
for (var key in keyList) {
newMap[key] = entry.value;
}
}
return newMap;
}
Run Code Online (Sandbox Code Playgroud)
然后你应该能够做到:
var mymap = makeMyMap({
['red', 'blue', 'green'] : 'Rock',
['pink', 'yellow', 'cyan']: 'Funk',
});
Run Code Online (Sandbox Code Playgroud)
请注意,上述内容Map适用于查找,如果您更改映射中的值,相关键仍将引用同一对象。但是,如果您需要替换映射中的值,相关键将继续引用旧对象。如果需要这样做,则需要在值周围添加一定程度的间接性。例如:
class Wrapped<T> {
Wrapped(this.value);
T value;
}
var map = <String, Wrapped<String>>{};
map['red'] = map['blue'] = map['green'] = Wrapped('Rock');
map['red'].value = 'Funk';
print(map['blue'].value); // Prints: Funk
Run Code Online (Sandbox Code Playgroud)
您可以从中派生一个类DelegatingMap,以便在使用时自动解包值operator []并自动更新 的现有Wrapped对象operator []=。
| 归档时间: |
|
| 查看次数: |
13227 次 |
| 最近记录: |