在Dart语言中,如何通过值获取MAP键?
我有一个类似的地图;
<div>
<b-list-group">
@foreach($projects as $project)
<b-list-group-item>{{ $project->title }}</b-list-group-item>
@endforeach
</b-list-group>
</div>
我需要使用值来获取密钥。我该怎么办?
答案 0 :(得分:14)
var usdKey = curr.keys.firstWhere(
(k) => curr[k] == 'USD', orElse: () => null);
答案 1 :(得分:3)
如果要对同一数据多次执行此操作,则应创建一个反向映射,以便可以执行简单的键查找,而不是重复进行线性搜索。这是反转地图的示例(可能有更简单的方法):
main() {
var orig = {"01": "USD", "17": "GBP", "33": "EUR"};
var reversed = Map.fromEntries(orig.entries.map((e) => MapEntry(e.value, e.key)));
for (var kv in reversed.entries) {
print(kv);
}
}
编辑:是的,反转地图可以简单地是:
var reversed = orig.map((k, v) => MapEntry(v, k));
这顶帽子给乔·康威带来了麻烦。谢谢。
答案 2 :(得分:1)
您可以执行以下操作:
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}');
}
}
}
答案 3 :(得分:1)
还有另一种方法(类似于GünterZöchbauer的答案):
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}');
}
}
在此代码中,您将获得MapEntry,其中包含键和值,而仅包含单独变量中的键。在某些代码中可能很有用。
答案 4 :(得分:1)
如果仍然需要解决方案,我写了一个simple library,以深入Map
内的值(在嵌套地图内搜索)。用法很简单,因为deepSearchByValue()
是扩展方法,因此您所需要做的就是导入我的库并在地图上调用该方法:
import 'package:deep_collection/deep_collection.dart';
void main() {
print({
"01": "USD",
"17": "GBP",
"33": "EUR",
}.deepSearchByValue((value) => value == 'USD'));
}
答案 5 :(得分:1)
以 Randal Schwartz 的回答为基础:
Map<T, R> invertMap<T, R>(Map<R, T> toInvert) =>
Map.fromEntries(toInvert.entries.map((e) => MapEntry(e.value, e.key)));
答案 6 :(得分:0)
Map map = {1: 'one', 2: 'two', 3: 'three'};
var key = map.keys.firstWhere((k) => map[k] == 'two', orElse: () => null);
print(key);