在Dart语言中,如何通过值获取MAP键?
我有一个Map,例如:
我有一个Map,例如:
{
"01": "USD",
"17": "GBP",
"33": "EUR"
}
我需要使用值来获取键。我该如何做到这一点?
{
"01": "USD",
"17": "GBP",
"33": "EUR"
}
我需要使用值来获取键。我该如何做到这一点?
var usdKey = curr.keys.firstWhere(
(k) => curr[k] == 'USD', orElse: () => null);
如果您将在同一数据上执行此操作多次,则应创建反向映射,以便可以执行简单的键查找而不是重复的线性搜索。以下是反转映射的示例(可能有更简单的方法):
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));
向Gitter上的Joe Conway致以敬意。感谢。
还有一种方法(类似于Günter Zö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}');
}
}
Map map = {1: 'one', 2: 'two', 3: 'three'};
var key = map.keys.firstWhere((k) => map[k] == 'two', orElse: () => null);
print(key);
Map
内的值。使用方法很简单,因为 deepSearchByValue()
是一个扩展方法,所以你所需要做的就是导入我的库并在你的 map 上调用该方法:import 'package:deep_collection/deep_collection.dart';
void main() {
print({
"01": "USD",
"17": "GBP",
"33": "EUR",
}.deepSearchByValue((value) => value == 'USD'));
}
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}');
}
}
}
switch
中硬编码值,这使得维护和重构变得困难。 - Michał Dobi Dobrzańskiextension InvertMap<K, V> on Map<K, V> {
Map<V, K> get inverse => Map.fromEntries(entries.map((e) => MapEntry(e.value, e.key)));
}
var inverseMap = originalMap.inverse;
Map<T, R> invertMap<T, R>(Map<R, T> toInvert) =>
Map.fromEntries(toInvert.entries.map((e) => MapEntry(e.value, e.key)));
Map
的keys
属性和Iterable
的firstWhere
方法,其余的是将它们有意义地结合在一起使用。https://api.dartlang.org/stable/2.0.0/dart-core/Map/keys.html,https://api.dartlang.org/stable/2.0.0/dart-core/Iterable/firstWhere.html - Günter Zöchbauer