Dart/Flutter:如何对map键和值进行排序,并举例说明

1,628 阅读2分钟

地图是一种带有键和值的无序的数据结构。

本教程展示了在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编程中基于键和值对地图进行排序。