Dictionary 具有多个关键点的颤振省道贴图,具有非常相同的值

Dictionary 具有多个关键点的颤振省道贴图,具有非常相同的值,dictionary,flutter,dart,Dictionary,Flutter,Dart,是否有任何类型的集合可以声明一个具有多个链接到同一个值的键的映射 我希望在声明映射的同时初始化映射。理想的情况是: MyMap-MyMap={['red','blue','green']:'Rock',['pink','yellow'…等等] 到目前为止,我在文档中找到了,但它似乎是多值的一个键,除此之外,我在实现上有很多困难,因为尽管文档中给出了0个示例 以下是我迄今为止的尝试: static Iterable mylist=['red','blue','green'];//我想将这些字符串

是否有任何类型的集合可以声明一个具有多个链接到同一个值的键的映射

我希望在声明映射的同时初始化映射。理想的情况是:

MyMap-MyMap={['red','blue','green']:'Rock',['pink','yellow'…等等]
到目前为止,我在文档中找到了,但它似乎是多值的一个键,除此之外,我在实现上有很多困难,因为尽管文档中给出了0个示例

以下是我迄今为止的尝试:

static Iterable mylist=['red','blue','green'];//我想将这些字符串与'Rock'关联
静态Iterable mylist=['pink','yellow','cyan'];//我想将这些字符串与'Funk'关联
静态Multimap-okayboomer=Multimap.fromIterable(mylist);/,{K键(动态元素),V值(动态元素)};
然后,每当我访问okayboomer['red'],我就会得到'Rock'

我也在想


非常感谢您的帮助!

您不一定需要任何特殊的数据结构;一个普通的
映射可以有多个键用于相同的值,您只需要一个helper函数就可以更方便地初始化它:

Map makeMyMap(映射映射){
var newMap={};
for(map.entries中的var条目){
var keyList=entry.key;
for(键列表中的var键){
newMap[key]=entry.value;
}
}
返回newMap;
}
然后你应该能够做到:

var mymap=makeMyMap({
['red'、'blue'、'green']:'Rock',
[‘粉色’、‘黄色’、‘青色’]:‘芬克’,
});
请注意,上面的
Map
将用于查找,如果在Map中对值进行了变异,则相关键仍将引用同一对象。但是,如果需要替换Map中的值,则相关键将继续引用旧对象。如果需要这样做,则需要在v周围添加一个间接级别价值。例如:

类包装{
包装(此值);
T值;
}
var-map={};
地图['red']=map['blue']=map['green']=Wrapped('Rock');
映射['red']。值='Funk';
打印(映射['blue'].value);//打印:Funk

您可以从派生一个类,以便在使用
操作符[]
时自动展开值,并自动更新
操作符[]的现有
已包装的
对象=

我同意jamesdlin的回答,您应该能够将重复的值分配给多个键。但是,根据您的使用情况,这可能不适用于您。如果您想更改与键“红色”关联的值,它将不会更新与“蓝色”和“绿色”关联的列表


如果这种类型的完整性对您很重要,我会将您的所有值存储在一个列表或二级映射中,然后将对它们的引用存储在主映射中。这样,如果您更新任何键,它将更改所有键的值。

因为您希望在声明映射的同时初始化映射,所以可以simp我要这样做

 Map<List<String>,dynamic> x = {
  ['red', 'blue', 'green']:"ROCK",
  ['pink', 'yellow', 'cyan']:"FUNK"
 };
 

请注意,使用这种方法,您将失去使用
Map
的大部分优势(例如
LinkedHashMap
的固定时间查找)。是的,正是我所想的,而且检索起来有点冗长。这仍然是一个有趣的想法。这是一个非常好的答案,但我想在声明映射时初始化的原因之一是在编译时而不是在运行时创建映射。有没有办法调整您的代码以允许这样做?PS:我非常喜欢您解释的两种方式。
print(x[x.keys.firstWhere((value)=>value.contains("red"))]);