地图是一种带有键和值的无序的数据结构。
本教程展示了在Dart和Flutter中通过键和值对地图进行排序的多种方法。
其中一种方法是使用集合包中的SplayTreeMap类,以排序的方式存储项目。
如何在Dart和Flutter中按值对地图进行排序?
有多种方法对地图中的键进行排序,SplayTreeMap类提供了命名的构造函数,使用from 方法,该方法接受地图和函数。函数包含了对地图中每个键和其他键进行排序的逻辑。
SplayTreeMap.from(map,function)
下面是一个以升序和降序对键进行排序的示例程序。
import 'dart:collection';
void main() {
var numbers = {'one': 1, 'two': 2, 'three': 3, 'four': 4};
print(numbers); //{one: 1, two: 2, three: 3, four: 4}
// Sort Map key in ascending order
final sortedKeysAsc = SplayTreeMap.from(
numbers, (keys1, keys2) => keys1.compareTo(keys2));
print(sortedKeysAsc); //{four: 4, one: 1, three: 3, two: 2}
// Sort Map key in descending order
final sortedKeysDesc = SplayTreeMap.from(
numbers, (keys1, keys2) => keys2.compareTo(keys1));
print(sortedKeysDesc); //{two: 2, three: 3, one: 1, four: 4}
}
输出
{one: 1, two: 2, three: 3, four: 4}
{four: 4, one: 1, three: 3, two: 2}
{two: 2, three: 3, one: 1, four: 4}
如何在dart和flutter中对map的值进行排序?
这个例子以升序和降序对地图的值进行排序。
如果使用numbers[keys1].compareTo(numbers[keys2]) 来比较数值,就会出现错误。方法'compareTo'不能在'int?'上调用,因为它有可能是空的。原因是关于空值的安全。我们必须使用numbers[keys1]!.compareTo(numbers[keys2]!)
下面是一个SplayTreeMap排序键和值的例子
import 'dart:collection';
void main() {
var numbers = {'one': 1, 'two': 2, 'three': 3, 'four': 4};
print(numbers); //{one: 1, two: 2, three: 3, four: 4}
// Sort Map key in ascending order
final sortedValuesAsc = SplayTreeMap.from(
numbers, (keys1, keys2) => numbers[keys1]!.compareTo(numbers[keys2]!));
print(sortedValuesAsc); //{one: 1, two: 2, three: 3, four: 4}
// Sort Map key in descending order
final sortedValuesDesc = SplayTreeMap.from(
numbers, (keys1, keys2) => numbers[keys2]!.compareTo(numbers[keys1]!));
print(sortedValuesDesc); //{four: 4, three: 3, two: 2, one: 1}
}
输出
{one: 1, two: 2, three: 3, four: 4}
{one: 1, two: 2, three: 3, four: 4}
{four: 4, three: 3, two: 2, one: 1}
结论
你已经学会了如何在dart和flutter编程中基于键和值对地图进行排序。