Дарт Возвращение списка значений, отсортированных по ключам с карты - PullRequest
0 голосов
/ 14 октября 2019

У меня есть Map<int, String>, где я хочу вернуть список строковых значений, но отсортированных в порядке возрастания / убывания ключей int. Это было бы легко, если бы я возвращал те же итерации, которые я также хотел бы отсортировать, например, возвращая список map.keys или map.values, но я не могу придумать способ сделать это, кроме создания списка вручнуюпосле итерации по всей карте с foreach() и вставкой значений в индекс из ключа карты, например, ниже, а затем вложения еще одного foreach() в этот список, чтобы избавиться от любых нулевых значений.

Map<int, String> charMap = {2:'b', 1:'a', 4:'d'};
List<String> tempList = [];
List<String> charList = [];
charMap.forEach((key, value) => tempList.insert(key, value));
//tempList == ['a', 'b', '', 'd'];
charList = tempList..where((e) => e != null);
//charList == ['a', 'b', 'd'];

Пожалуйста, скажите мне, что есть лучший, более эффективный способ? Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Пример сортировки с использованием методов статического расширения Dart:

import 'package:enumerable/enumerable.dart';

void main(List<String> args) {
  final charMap = {2: 'b', 1: 'a', 4: 'd', null: 'NULL!'};
  final asc = charMap.keys.orderBy((e) => e).select((e) => charMap[e]);
  print(asc);

  final desc =
      charMap.keys.orderByDescending((e) => e).select((e) => charMap[e]);
  print(desc);
}

Результат:

(NULL!, a, b, d)
(d, b, a, NULL!)
0 голосов
/ 14 октября 2019

Вы можете создать список отсортированных ключей (keysAsc или keysDesc), а затем выполнить итерацию по этому списку, чтобы получить значения из карты ...

Map<int, String> charMap = {2: 'b', 1: 'a', 4: 'd'};
List<String> charList = [];

final keysAsc = charMap.keys.toList()..sort((a, b) => a.compareTo(b));
final keysDesc = charMap.keys.toList()..sort((a, b) => b.compareTo(a));

for (final key in keysAsc) {
  charList.add(charMap[key]);
}

print(charList);
...