【Flutter】Dart 数据类型 Map 类型 ( 创建 Map 集合 | 初始化 Map 集合 | 遍历 Map 集合 )_让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 )-程序员宝宝_flutter 遍历map

技术标签: Flutter  





一、 Dart 数据类型 Map 类型



Dart 中的 Map 数据类型与 Java 类似 , 由键值对组成 , 键 Key , 值 Value ;

其中 Key 的值在 Map 中必须是唯一的 , Value 的值可以重复 ;





二、 Map 类型初始化并赋值





1、 创建 Map 对象同时进行初始化操作


创建 Map 对象同时进行初始化操作 : 通过 {} 初始化 Map 对象, 每个元素形式为 Key : Value , 每个元素的 键( Key )值 ( Value ) 之间使用 冒号 " : " 分割 , 元素与元素之间使用 逗号 " , " 分割 ;

代码示例 :

    // 通过 {} 初始化 Map 对象, 每个元素形式为 Key : Value
    // 键( Key ) 与 值 ( Value ) 之间使用冒号 " : " 分割
    // 元素与元素之间使用逗号 " , " 分割
    Map student = {
    1 : "Tom", 2 : "Jerry", 3 : "Trump"};

    // 打印 Map 集合
    print(student);

执行结果 :

{
    1: Tom, 2: Jerry, 3: Trump}


2、 先创建 Map 对象再进行赋值


先创建 Map 对象再进行赋值 : 先创建一个空的 Map 集合 , 使用 下标 的方式为 Map 集合赋值 , 用法如下 :

    // II . 先创建空的 Map 集合 , 然后再进行初始化操作
    Map president = {
    };

    // 为 Map 集合添加元素
    president[1] = "Bush";
    president[2] = "Obama";
    president[3] = "Trump";

    // 打印 Map 集合
    print(president);

打印结果 :

{
    1: Bush, 2: Obama, 3: Trump}




三、 Map 集合遍历





1、 使用 forEach 遍历 Map 集合


使用 forEach 遍历 Map 集合 :

    // 1 . 使用 forEach 进行遍历
    president.forEach( (key, value){
    
      print("forEach 遍历 : $key : $value");
    } );

打印结果 :

forEach 遍历 : 1 : Bush
forEach 遍历 : 2 : Obama
forEach 遍历 : 3 : Trump


2、 使用普通 for 循环遍历 Map 集合


使用普通 for 循环遍历 Map 集合 :

    // 2 . 通过 for 循环遍历 Map 集合
    // 调用 Map 对象的 keys 成员 , 返回一个由 键 Key 组成的数组
    for (var key in president.keys){
    
      print("for 循环遍历 : Key : $key , Value : ${president[key]}");
    }

打印结果 :

for 循环遍历 : Key : 1 , Value : Bush
for 循环遍历 : Key : 2 , Value : Obama
for 循环遍历 : Key : 3 , Value : Trump


3、 使用 map 方法进行遍历生成新的 Map 集合


使用 map 方法进行遍历生成新的 Map 集合 : 使用 map 方法 进行遍历 , 遍历过程中 生成新的 Map 集合 , 遍历后 , 会返回一个新的 Map 集合 , 传入一个回调函数 , 参数是 Map 集合中每个元素的 键值对 key 和 value , 返回值是新的 Map 集合 ;

下面的示例将 原 Map 集合中的键值对对调 , 生成一个新的 Map 集合 , 并打印新的 Map 集合中的内容 ;

    // 3 . 使用 map 方法进行遍历
    // 遍历过程中生成新的 Map 集合
    // 遍历后 , 会返回一个新的 Map 集合
    // 传入一个回调函数 , 参数是 key value , 返回值是新的 Map 集合
    Map president2 = president.map(
            (key, value){
    
          // 这里将 Map 集合中的 Key 和 Value 进行颠倒 , 生成一个新的 Map 集合
          return MapEntry(value, key);
        }
    );

    // 打印新的 Map 集合
    print(president2);

打印结果 :

{
    Bush: 1, Obama: 2, Trump: 3}




四、 完整代码示例




import 'package:flutter/material.dart';

class DartType_Map extends StatefulWidget {
    
  @override
  _DartType_ListState createState() => _DartType_ListState();
}

class _DartType_ListState extends State<DartType_Map> {
    
  @override
  Widget build(BuildContext context) {
    

    mapDemo();

    return Container(child: Text('Map 数据类型'));
  }


  /**
   * Map 示例
   */
  mapDemo(){
    
  
    // I . 定义 Map 集合并初始化

    // 通过 {} 初始化 Map 数据, 每个元素形式为 Key : Value
    // 键( Key ) 与 值 ( Value ) 之间使用冒号 " : " 分割
    // 元素与元素之间使用逗号 " , " 分割
    Map student = {
    1 : "Tom", 2 : "Jerry", 3 : "Trump"};

    // 打印 Map 集合
    print(student);


    // II . 先创建空的 Map 集合 , 然后再进行初始化操作
    Map president = {
    };

    // 为 Map 集合添加元素
    president[1] = "Bush";
    president[2] = "Obama";
    president[3] = "Trump";

    // 打印 Map 集合
    print(president);


    // III . Map 集合遍历

    // 1 . 使用 forEach 进行遍历
    president.forEach( (key, value){
    
      print("forEach 遍历 : $key : $value");
    } );


    // 2 . 通过 for 循环遍历 Map 集合
    // 调用 Map 对象的 keys 成员 , 返回一个由 键 Key 组成的数组
    for (var key in president.keys){
    
      print("for 循环遍历 : Key : $key , Value : ${president[key]}");
    }


    // 3 . 使用 map 方法进行遍历
    // 遍历过程中生成新的 Map 集合
    // 遍历后 , 会返回一个新的 Map 集合
    // 传入一个回调函数 , 参数是 key value , 返回值是新的 Map 集合
    Map president2 = president.map(
            (key, value){
    
          // 这里将 Map 集合中的 Key 和 Value 进行颠倒 , 生成一个新的 Map 集合
          return MapEntry(value, key);
        }
    );

    // 打印新的 Map 集合
    print(president2);


  }


}

执行结果 :

{
    1: Tom, 2: Jerry, 3: Trump}
{
    1: Bush, 2: Obama, 3: Trump}
forEach 遍历 : 1 : Bush
forEach 遍历 : 2 : Obama
forEach 遍历 : 3 : Trump
for 循环遍历 : Key : 1 , Value : Bush
for 循环遍历 : Key : 2 , Value : Obama
for 循环遍历 : Key : 3 , Value : Trump
{
    Bush: 1, Obama: 2, Trump: 3}

在这里插入图片描述





五、 相关资源



参考资料 :


博客源码下载 :

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/han1202012/article/details/113700234

智能推荐

linux下安装2种GCC的方法_无影独白的博客-程序员宝宝

转载自春夏秋冬的博客。现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。本文以在Redhat Linux安装GCC4.1.2为例(因在项目开发过程中要求使用,没有用最新的GCC版本),介绍Linux安装GCC过程。安装之前,系统中必须要有cc或者gcc等编译

Kafka项目实战-用户日志上报实时统计之分析与设计_weixin_30500473的博客-程序员宝宝

1.概述  本课程的视频教程地址:《Kafka实战项目之分析与设计》  本课程我通过一个用户实时上报日志案例作为基础,带着大家去分析Kafka这样一个项目的各个环节,从而对项目的整体设计做比较合理的规划,最终让大家能够通过本课程去掌握类似Kafka项目的分析与设计。下面,我给大家介绍本课程包含的课时内容,如下图所示:  接下来,我们开始第一课时的学习:《项目整体概述》。2.内...

python 链表和列表_Python实现列表和链表_weixin_39995351的博客-程序员宝宝

原博文2020-04-19 13:25 −## Python实现列表和链表```pythonlist[index] O(1)list.append O(1)list.insert O(n)list.pop(index) 默认删last O(1)list.remove...0465相关推荐2019-12-24 11:00 −循环内用 ...

VUE—同级路由传值(图文)_Poppy_LYT的博客-程序员宝宝

VUE—同级路由传值方向: My_collect_new 传值一个num给 My_collect重点就是圈起来的那句话,其余的自己写的其他内容绑定一个点击事件,方法名为finishnew,执行完成之后我将num这个值传给接收的同级路由,这时候可以发现地址栏发生了变化我传的值这个时候已经进入了我的接收这个值的同级路由My_collect了this.$route.query.num这...

对.obj的初了解_Timidkid的博客-程序员宝宝

概述3D模型文件格式,适合用于3D软件模型之间的互导,也可以通过Maya读写。我们可以在3dsMax或LightWave中建立一个模型,导出OBJ文件后,可以把它调到Maya里面渲染或动画。目前几乎所有知名的3D软件都支持OBJ文件的读写,不过其中很多需要通过插件才能实现。OBJ文件是一种文本文件,可以直接用写字板打开进行查看和编辑修改。.obj文件的特

iOS设备UUID的获取方法(不变的唯一值)_ThomasYB的博客-程序员宝宝_ios uuid

UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。但这仍是目前为止最佳的解决办法了,如果有更好的解决办法,欢迎留言。进入正题,我之后又试了下自己写的方法,发现用模拟器可以,

随便推点

读懂BI商业智能与大数据应用的区别_weixin_30790841的博客-程序员宝宝

之所以要区分大数据应用与BI(商业智能),是因为大数据应用与BI、数据挖掘等,并没有一个相对完整的认知。BI(BusinessIntelligence)即商务智能,它是一套完整的解决方案,用来将企业中现有的数据进行有效的整合,快速准确的提供报表并提出决策依据,帮助企业做出明智的业务经营决策。伴随着BI的发展,是ETL,数据集成平台等概念的提出。ETL,Extraction Transfor...

富士通FRAM技术和工作原理_EVERSPIN的博客-程序员宝宝

存储设备(主要指存储数据的半导体产品)通常分为两种类型。一种是“易失性存储器”——数据在断电时消失,如DRAM。另一种类型则是“非易失性存储器”——数据在断电时不会消失,这意味着数据一旦被写入,只要不进行擦除或重写,数据就不会改变。FRAM是一种与Flash相同的非易失性存储器。富士通FRAM技术和工作原理FRAM是运用铁电材料(PZT等)的铁电性和铁电效应来进行非易失性数据存储又可以像RAM一样操作。•当一个电场被加到铁电晶体时,中心离子顺着电场的方向在晶体里移动,当离子移动时,它通过一个能量壁垒,

(局部刷新)jquery.ajax提交并实现单个div刷新_黄爱岗的博客-程序员宝宝

web开发中我们经常会遇到局部刷新页面的需求,以前我经常使用ajax和iframe实现局部刷新,后来做政府的项目,对页面的样式要求比较多,发现使用iframe控制样式什么的很麻烦,所以就采用了新的办法,就是下面我们要说的ajax配合div局部刷新页面,其实很简单,下面我们就看一下这种刷新方式是如何实现的。

搞定linux上MySQL编程(六):C语言编写MySQL程序(结)_It_BeeCoder的博客-程序员宝宝

From:http://blog.csdn.net/shallnet/article/details/46485675        在实际应用中,我们不可能在命令行登录进数据库进行数据的查询、插入等操作,用户一般是使用一个界面良好的应用程序软件来对数据进行管理。为了方便应用程序的开发,MySQL提供了多种编程语言(C、perl、php等)的编程接口,供开发者使用。       

UVa 1583 - Digit Generator 解题报告 - C语言_weixin_30877181的博客-程序员宝宝

1.题目大意如果a加上a的各个数字之和得到b,则说a是b的生成元。给出n其中$1\le n\le 100000$,求其最小生成元,若没有解则输出0。2.思路使用打表的方法打出各个数字a对应的b,存入s[b]中。3.应注意的问题(1) 没有解时输出0,也就意味着在开始打表前要把数组s[maxn]清零。利用memset实现,要加入string.h的头文件,而memset...

SpringBoot项目直接访问JSP页面,不通过Controller进行重定向_总是幸福的老豌豆的博客-程序员宝宝_springboot直接访问jsp页面

最近项目有一个新的需求需要添加jsp页面, 由于我们项目使用的是springboot,项目框架中已经封装好了Controller层统一返回数据的格式,已经增强了,同时jsp页面只是静态展示,几乎不用修改,我进行了如下的配置: