List 从地图返回按键排序的值列表的Dart

List 从地图返回按键排序的值列表的Dart,list,sorting,dictionary,dart,type-conversion,List,Sorting,Dictionary,Dart,Type Conversion,我有一个映射,其中我希望返回一个字符串值列表,但按int键的升序/降序排序。如果我返回我也希望排序的相同的iterables,例如返回map.keys或map.values,这将很容易,但是我想不出一种方法来实现这一点,除了在使用foreach()迭代整个映射并从映射键插入值到索引之后手动创建一个列表,例如,然后在该列表上嵌套另一个foreach(),以消除任何空值 Map<int, String> charMap = {2:'b', 1:'a', 4:'d'}; List<S

我有一个
映射
,其中我希望返回一个字符串值列表,但按int键的升序/降序排序。如果我返回我也希望排序的相同的iterables,例如返回
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'];
Map charMap={2:'b',1:'a',4:'d'};
列表圣堂武士=[];
列表charList=[];
forEach((键,值)=>templast.insert(键,值));
//圣殿骑士==['a','b','d'];
charList=templast..where((e)=>e!=null);
//字符表==['a','b','d'];

请告诉我有更好更有效的方法吗?非常感谢您的帮助

您可以创建已排序键的列表(
keysac
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);
Map charMap={2:b',1:a',4:d'};
列表charList=[];
final keysac=charMap.keys.toList()…排序((a,b)=>a.compareTo(b));
final keysDesc=charMap.keys.toList()…排序((a,b)=>b.compareTo(a));
用于(钥匙ASC中的最终钥匙){
添加(charMap[key]);
}
打印(charList);