Dictionary 如何通过Dart中的值获取地图关键点?
在Dart语言中,如何通过值获取贴图键 我有一张地图Dictionary 如何通过Dart中的值获取地图关键点?,dictionary,dart,key,Dictionary,Dart,Key,在Dart语言中,如何通过值获取贴图键 我有一张地图 { "01": "USD", "17": "GBP", "33": "EUR" } 我需要使用值来获取键。如何执行此操作?如果要对同一数据执行多次此操作,则应创建反向映射,以便执行简单的键查找,而不是重复的线性搜索。下面是一个反转地图的示例(可能有更简单的方法): var usdKey = curr.keys.firstWhere( (k) => curr[k] == 'USD', orElse: () =>
{
"01": "USD",
"17": "GBP",
"33": "EUR"
}
我需要使用值来获取键。如何执行此操作?如果要对同一数据执行多次此操作,则应创建反向映射,以便执行简单的键查找,而不是重复的线性搜索。下面是一个反转地图的示例(可能有更简单的方法):
var usdKey = curr.keys.firstWhere(
(k) => curr[k] == 'USD', orElse: () => null);
编辑:是的,反转地图可以是:
var reversed = orig.map((k, v) => MapEntry(v, k));
向吉特岛上的乔·康威致敬。谢谢。您可以执行以下操作:
var mapper = {
'01' : 'USD',
'17' : 'GBP' }
for(var val in mapper.keys){
switch(mapper[val]){
case 'USD' : {
print('key for ${mapper[val]} is : ' '${val}');
}
break;
case 'GBP' : {
print('key for ${mapper[val]} is : ' '${val}');
}
}
}
还有另一种方法(类似于Günter Zöchbauer的答案):
在这段代码中,您将获得MapEntry,它包含键和值,而不是单独变量中的唯一键。它在某些代码中可能很有用 如果有人仍然需要一个解决方案,我写了一篇文章,在
Map
中通过值进行深度搜索(在嵌套映射中搜索)。用法很简单,因为deepSearchByValue()
是一个扩展方法,所以您只需导入我的库并在地图上调用该方法:
Map map = {1: 'one', 2: 'two', 3: 'three'};
var key = map.keys.firstWhere((k) => map[k] == 'two', orElse: () => null);
print(key);
import'package:deep_collection/deep_collection.dart';
void main(){
印刷品({
“01”:“美元”,
“17”:“英镑”,
“33”:“欧元”,
}.deepSearchByValue((value)=>value='USD');
}
谢谢你的工作。。。顺便问一下,我从哪里可以得到这方面的详细信息?所以我可以学习理解,我可以在我的高级地图项目的后期使用?我不认为这是作为一件事情记录下来的。有Map
的keys
属性和firstWhere
的Iterable
方法,其余的以有意义的方式一起使用它们。,@zoechi由于某种原因未能获取键值!。虽然这段代码可能有助于解决这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,只使用代码的答案往往不太有用。有关更多信息,请参阅:map.entries.firstWhere((element)=>element.value='two',orElse:()=>null).key;这很有用,因为(元素)同时包含键和值,并在测试条件下帮助我使用键和值,因为我有相同的值,但键不同,但我需要这两个条目。因为“firstWhere”忽略了副本。谢谢你,我的回答帮助了你。MapEntry确实有助于可视化数据结构,这对于调试和测试非常有用,但不有效且不可重用。您可以在开关中硬编码值,这使得维护和重构变得困难。
void main() {
Map currencies = {
"01": "USD",
"17": "GBP",
"33": "EUR"
};
MapEntry entry = currencies.entries.firstWhere((element) => element.value=='GBP', orElse: () => null);
if(entry != null){
print('key = ${entry.key}');
print('value = ${entry.value}');
}
}
Map map = {1: 'one', 2: 'two', 3: 'three'};
var key = map.keys.firstWhere((k) => map[k] == 'two', orElse: () => null);
print(key);