#flutter
Вопрос:
Как я могу использовать firstWhereOrNull с картами во Флаттере?
Другими словами, как я могу это сделать:
final myVariable1 = myList.firstWhereOrNull(
(myVariable2) =>
!myList.containsValue(myVariable2));
Вместо использования списка (myList) я хотел бы сделать то же самое с картой (Map<Строка, int>).
Map<String,int> myMap = {};
myMap("stuff1") = 1;
myMap("stuff2") = 2;
myMap("stuff3") = 3;
Спасибо
Комментарии:
1. Вы можете показать свою переменную карты?
2. Я просто добавил это к своему вопросу. Спасибо
3. Вы хотите сказать, что вам нравится проверять значение null на основе ключей?
4.
Map<String, int>
не допускает ни обнуляемых ключей, ни значений. AMap
само по себе не являетсяIterable
(поэтому не может использоватьfirstWhere
илиfirstWhereOrNull
напрямую), но вы можете получитьIterable
s от него (например, через егоkeys
values
свойства , илиentries
). Мы не можем ответить на ваш вопрос, не указав, какие выходные данные вы хотите получить.
Ответ №1:
firstWhereOrNull
Для карт такого метода не существует, но вы можете легко придумать его, используя методы расширения:
extension ExtendedMap on Map {
/// The first entry satisfying test, or null if there are none.
MapEntry? firstWhereOrNull(bool Function(MapEntry entry) test) {
for (var entry in this.entries) {
if (test(entry)) return entry;
}
return null;
}
}
Вот как вы можете его использовать:
final map = <String, int>{
'stuff1': 1,
'stuff2': 2,
'stuff3': 3,
};
final test = map.firstWhereOrNull((entry) => entry.value == 2);
print(test); // Prints MapEntry(stuff2: 2)
final nullTest = map.firstWhereOrNull((entry) => entry.key == "stuff5");
print(nullTest); // Prints null
Ответ №2:
Итак, я создал эту реализацию, я не думаю, что она наиболее оптимизирована, также потому, что было необходимо использовать приведение, так как из-за безопасности звука null невозможно вернуть какое-либо значение. Но для тебя это работает.
var myMap = {"key1": "value", "key2": 3};
var result = myMap.entries
.cast<dynamic>()
.firstWhere((e) => e.key == "key", orElse: () => null);
print(result);
Я надеюсь, что это каким-то образом поможет!