如何在 Dart 中按键对 Map 进行排序

举报
坚果的博客 发表于 2022/02/22 08:18:27 2022/02/22
【摘要】 Dart Map作者:坚果公众号:"大前端之旅"华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术的分享,包括Flutter,小程序,安卓,VUE,JavaScript。Dart MapMap 是一个对象,用于将一组值表示为键值对。在Map中,keys和values都可以是任何类型的对象,keys和values都可以是同一种类...

Dart Map

作者:坚果

公众号:"大前端之旅"

华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术的分享,包括Flutter,小程序,安卓,VUE,JavaScript。

Dart Map

Map 是一个对象,用于将一组值表示为键值对。在Map中,keys和values都可以是任何类型的对象,keys和values都可以是同一种类型的对象没有必要。。在Map中,每个key只能出现一次,但是同一个value可以多次使用. 在 Map 中,每个值都与一个唯一的键相关联,这个键用于访问对应的 Map 值。可以使用大括号 ({ }) 定义 Map,并且可以使用方括号 ([]) 分配和访问值。


​
var weekDays = {'Day1': 'Mon', 'Day2': 'Tue', 'Day3': 'Wed', 'Day4': 'Thu'};




在 Dart 中声明 Map

在 Dart 中,可以通过以下两种方式声明 Map:

  • 使用 Map文字

  • 使用 Map 构造函数

使用 Map Literals 声明 Map

在 Dart 中,我们可以声明一个带有 Map文字的 Map,如下所示:

句法:-

    
var <map_name> = {key1:value1, key2:value2,..., key_n:value_n}


在这里,映射文字是一个键值对列表,用逗号分隔,用一对花括号({ })包围。键值对是由冒号(:)分隔的键和值的组合。

例子:-

var weekDays = {'mon': 'Monday', 'tue': 'Tuesday', 'wed': 'Wednesday', 'thu': 'Thursday', 'fri': 'Friday', 'sat': 'Saturday', 'sun': 'Sunday'};
​



使用 Map Constructor 声明/初始化 Map

在 Dart 中,我们可以使用映射构造函数声明/初始化映射,如下所示:

句法 :-

声明一个空映射如下 -

var &amp;lt;map_name&amp;gt; = new Map();


现在,让我们按如下方式初始化 Map -

map_name[key] = value;


例子:-

void main() { 
  var weekDays = new Map();
  weekDays['mon']  = "Monday";
  weekDays['tue']  = "Tuesday";
  weekDays['wed']  = "Wednesday";
  weekDays['thu']  = "Thursday";
  weekDays['fri']  = "Friday";
  weekDays['sat']  = "Saturday";
  weekDays['sun']  = "Sunday";
  print(weekDays);
}


输出:-

{mon: Monday, tue: Tuesday, wed: Wednesday, thu: Thursday, fri: Friday, sat: Saturday, sun: Sunday}




Map属性

下面是 Dart Map 支持的属性列表。

PROPERTY 描述
Keys 返回一个可迭代对象,表示相应 Map对象中的所有键
Values 返回一个可迭代对象,表示相应 Map对象中的所有值
Length 返回 Map的大小
isEmpty 如果 Map 是空 Map,则返回 true
isNotEmpty 如果 Map 至少有一项,则返回 true。

Map方法

下面是 Dart Map 支持的常用方法列表。


PROPERTY 描述
addAll() 将所有键值对添加到此映射中。
clear() 从 Map中删除所有键值对。
remove() 从 Map中删除键及其关联的值(如果存在)。
forEach() 迭代并将函数应用于映射的每个键值对。



如何在 Dart 中按键对 Map 进行排序

要对Map 进行排序,我们可以利用SplayTreeMap.

SplayTreeMap是一种按排序顺序迭代键的映射。SplayTreeMap是自平衡二叉树。这意味着经常访问的项将移近树的根。


句法

以下是声明 SplayTreeMap·的语法:

SplayTreeMap map = SplayTreeMap();


代码

以下代码显示了如何按键对map进行排序:

import 'dart:collection';
​
void main() {
  // Creating SplayTreeMap
  var fruits = SplayTreeMap<int, String>();
  
  // Adding key-value pairs
  fruits[1] = 'Orange';
  fruits[4] = 'Banana';
  fruits[6] = 'Pawpaw';
  fruits[3] = 'Apple';
  fruits[5] = 'Mango';
  fruits[2] = 'Avocado';
​
  print("***Sorted map by keys**");
  print(fruits);
​
  // Iterating over map pairs using forEach method 
  fruits.forEach((key, val) {
    print('{ key: $key, value: $val}');
  });
​
}


map排序


import "dart:collection";
​
main() {
  final SplayTreeMap<String, Map<String,String>> st = 
      SplayTreeMap<String, Map<String,String>>();
​
  st["yyy"] = {"should be" : "3rd"};
  st["zzz"] = {"should be" : "last"};
  st["aaa"] = {"should be" : "first"};
  st["bbb"] = {"should be" : "2nd"};
​
  for (final String key in st.keys) {
    print("$key : ${st[key]}");
  }
}
​
// Output:
// aaa : first
// bbb : 2nd
// yyy : 3rd
// zzz : last
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。