Как я могу отфильтровать List <Map <String, dynamic >>, чтобы получить значение во Flutter? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть данные json, и я загружаюсь в List<Map<String, dynamic>>, используя await jsonDecode. .

Пример, у меня есть;

  1. сумма = 12500
  2. калибр = 24

и мне нужно отфильтровать сына, чтобы получить значение зрелости: 689.19

Также, если у меня сумма = 12500 и значение = 689.19, мне нужно получить калибр, равный 24.

Как мне отфильтровать данные List> json, чтобы получить значение во Flutter?

[
   {"amount": "5000", "caliber": "12", "maturity":  "484.25"},
   {"amount": "5000", "caliber": "24", "maturity":  "275.67"},
   {"amount": "7500", "caliber": "12", "maturity":  "726.38"},
   {"amount": "7500", "caliber": "24", "maturity":  "413.51"},
   {"amount": "10000", "caliber": "12", "maturity":  "968.50"},
   {"amount": "10000", "caliber": "24", "maturity":  "551.35"},
   {"amount": "12500", "caliber": "12", "maturity":  "1210.63"},
   {"amount": "12500", "caliber": "24", "maturity":  "689.19"},
   {"amount": "15000", "caliber": "12", "maturity":  "1452.76"},
   {"amount": "15000", "caliber": "24", "maturity":  "827.03"},
   {"amount": "15000", "caliber": "12", "maturity":  "1694.89"},
   {"amount": "17500", "caliber": "24", "maturity":  "964.87"},
   {"amount": "17500", "caliber": "36", "maturity":  "727.66"},
   {"amount": "17500", "caliber": "48", "maturity":  "613.53"},
   {"amount": "17500", "caliber": "60", "maturity":  "548.44"},
   {"amount": "20000", "caliber": "12", "maturity":  "1937.01"},
   {"amount": "20000", "caliber": "24", "maturity":  "1102.71"}
]

UPDATE: С помощью @Muldec я наконец понял.

Сначала я загружаю выше сына в список, как показано ниже. И примените ответ @Muldec, и это сработало.

List<Map> myList = List<Map>.from(jsonDecode(jsonFastCalculation) as List);
final item = myList.firstWhere((e) => e['amount'] == '12500' && e['caliber'] == '24');
print(item['maturity']);

1 Ответ

1 голос
/ 14 мая 2019

Вы можете использовать методы firstWhere или where в своем списке, чтобы получить необходимый элемент Map или список Map в зависимости от критериев поиска.

Предположим, что вы абсолютноУбедитесь, что ваш критерий поиска даст вам только один элемент (или что вы заботитесь только о первом элементе, отвечающем вашим критериям), вот пример кода с firstWhere:

List<Map<String, dynamic>> myList = ....;

final item = myList.firstWhere((e) => e['amount'] == '12500' && e['caliber'] == '24');
print(item['maturity']);

Поиск калибра на основе суммыа зрелость - это просто вопрос смены теста в методе firstWhere

...