Flutter中Map、List数组的常用方法

这篇具有很好参考价值的文章主要介绍了Flutter中Map、List数组的常用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Dart语言是Flutter开发的必备语言,官方地址如下:Dart:https://dart.cn/

使用dart工具来运行这些常用的方法,工具:https://dartpad.cn

在Dart中,Map用来存储对像类型的数据,List与Set用来存储数组类型的数据。

Dart中的Map用来保存key-value键值对的数据集合

Map的创建实例如下:

// 创建一个Map实例,默认实现是LinkedHashMap。
Map()

// 创建一个LinkedHashMap实例,包含other中的所有键值对。
Map.from(Map other)

// 创建一个Map实例,其中Key和Value由iterable的元素计算得到。
Map.fromIterable(Iterable iterable, {K key(element), V value(element)})

 // 将指定的keys和values关联,创建一个Map实例。
Map.fromIterables(Iterable<K> keys, Iterable<V> values)

 // 使用默认实现LinkedHashMap创建一个严格的Map。
Map.identity()

 // 创建一个不可修改、基于哈希值的Map,包含other所有的项
Map.unmodifiable(Map other)

创建有一个有初始值的Map,代码如下:

  // 根据一个Map创建一个新的Map, 插入顺序进行排列
  var dic1 = new Map.from({'name': '张三'});
  print(dic1);  // {name: 张三}
 
  // 根据List创建Map, 插入顺序进行排列
  List<int> list = [1, 2, 3];
  // 使用默认方式, key和value都是数组对应的元素
  var dic2 = new Map.fromIterable(list);
  print(dic2);  // {1: 1, 2: 2, 3: 3}


  // 设置key和value的值
  var dic3 = new Map.fromIterable(list, key: (item) => item.toString(), value: (item) => item * item);
  print(dic3);  // {1: 1, 2: 4, 3: 9}

  // 创建一个不可修改、基于哈希值的Map
  var dic6 = new Map.unmodifiable({'name': 张三});
  print(dic6); // {name: 张三}

根据List数据来创建Map,代码如下:

  // 两个数组映射一个字典, 插入顺序进行排列
  List<String> keys = ['name', 'age'];
  var values = [张三, 20];
  // 如果有相同的key值, 后面的值会覆盖前面的值
  var dic4 = new Map.fromIterables(keys, values);
  print(dic4);  // {name: 张三, age: 20}
var words = <String>['fee', 'fi', 'fo', 'fum'];
var map = words.asMap();  // {0: fee, 1: fi, 2: fo, 3: fum}
map.keys.toList(); // [0, 1, 2, 3]

List数组的常用方法

定义固定长度数组

void main() {  var list = List(2);  print('$list'); // [null, null]}

定义混合类型数组

void main() { 
 var list = List<dynamic>();
  list.add('我是文本');
  list.add(0.66); 
 print(list); // [我是文本, 0.66]}

判断数组内是否有满足条件的元素- any

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6];// 数组中是否有大于3的元素
  print(list.any((v) => v > 3)); // true
// 数组中是否有大于7的元素
  print(list.any((v) => v > 7)); // false
}

判断数组所有元素是否都满足设定条件 - every

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6];
// 数组中所有元素是否都大于0
  print(list.every((v) => v > 0)); // true
// 数组中所有元素是否都大于5
  print(list.every((v) => v > 5)); // false
}

将数组用指定字符拼接成字符串 - join

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6];
  // 将数组转换为用英文逗号拼接的字符串
  print(list.join(',')); // 1,2,2,3,4,5,6,6
}

将字符串以指定字符分割成数组-split

void main() {
  String str = '1,2,2,3,4,5,6,6';
  
  print(str.split(',')); // [1,2,2,3,4,5,6,6]
}

数组去重 - toSet

void main() {
var list = [1, 2, 2, 3, 4, 5, 6, 6];
print(list.toSet()); // {1, 2, 3, 4, 5, 6}
}

数组取指定个数的数组- take

void main() {
  List latest = [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4];
  List list = latest.take(5).toList();
  print('value: $latest  list:$list');
}

打印:value: [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4]  list:[1, 2, 3, 4, 5]

按指定条件返回 - map

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6];  // 将list所有元素加1并返回数组
  var v = list.map((e) {
    return e + 1;  
}).toList(); 
 print(v); //[2, 3, 3, 4, 5, 6, 7, 7]
}

数组遍历 - for\for in\forEach

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6]; 
 //for
  for (var i = 0; i < list.length; i++) {
    print("for:$i");  
}
  //for in
  for (var item in list) {
    print("for in:$item");  
}
  //forEach
  list.forEach((element) {
    print("forEach:$element");
  });

//while+iterator迭代器遍历,类似Java中的iteator       
while(list.iterator.moveNext()) {
  //获取对应的值
  var value = list.iterator.current;
 print("for:$value");
  
}
 
}

累加器 - reduce

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6];// 将每次返回值作为value循环执行。最终返回最后一次执行值
  var count = list.reduce((value, element) {
    print('value: $value - element: $element');
    /**    每次的执行结果
    value: 1 - element: 2
    value: 3 - element: 2 
   value: 5 - element: 3 
   value: 8 - element: 4 
   value: 12 - element: 5 
   value: 17 - element: 6
    value: 23 - element: 6 
 */ 
   return value + element; 
 }); 
 print('count: $count'); // count: 29
}

排序 - sort

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6];
// a - b 为升序, b - a为降序
  list.sort((a, b) {    return b - a;  });
  print(list); //[6, 6, 5, 4, 3, 2, 2, 1]
}

获取满足条件的元素 - where

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6];
  // 获取所有大于3的元素
  print(list.where((v) => v > 3).toList()); //[4, 5, 6, 6]
}

获取满足条件的第一个元素 - firstWhere

void main() {
  var list = [1, 2, 2, 3, 4, 5, 6, 6];  // 获取最后一个大于3的元素
  print(list.firstWhere((v) => v > 3)); // 4
  // 如果未查找到所制定条件的元素,进入orElse参数 
 list.firstWhere((v) => v > 6, orElse: () {
    print(888);
  });
}



获取满足条件的最后一个元素 - lastWhere (与firstWhere同理,第一个与最后一个的区别)

删除满足条件的元素 - removeWhere

  /// final numbers = <String>['one', 'two', 'three', 'four'];
  /// numbers.removeWhere((item) => item.length == 3);
  /// print(numbers); // [three, four]

从指定位置开始,获取满足条件的第一个元素的索引 - indexWhere

 获取满足条件的最后一个元素的索引(倒叙查询) - lastIndexWhere(与indexWhere同理,第一个与最后一个的区别)

从指定位置开始,获取指定值的索引 - indexOf

 从指定位置开始,倒叙获取指定值的索引 - lastIndexOf(与indexOf同理,第一次与最后一次的区别)

批量添加 - addAll或者 扩展操作符(…)和 空感知扩展操作符(…?)

void main() { 
  var list = [1, 2, 2, 3, 4, 5, 6, 6];
  var list2 = [0, 20, 40];
  list.addAll(list2);
  print(list); //[1, 2, 2, 3, 4, 5, 6, 6, 0, 20, 40]


}
//或使用扩展操作符,结果是一样的
void main() {
  var list2 = [0, 20, 40];
  var list = [1, 2, 2, 3, 4, 5, 6, 6, ...?list2];
  print(list); //[1, 2, 2, 3, 4, 5, 6, 6, 0, 20, 40]
}

获取倒序迭代器 - reversed.注意:翻转过后的数组,要用toList方法,才能成为一个新的数组

void main() { 
   var list = [1, 2, 2, 3, 4, 5, 6, 6];  
  print(list.reversed); // (6, 6, 5, 4, 3, 2, 2, 1)
print(list.reversed.toList()); // [6, 6, 5, 4, 3, 2, 2, 1]
}

生成值列表:List.generate

List<E>.generate(
int length,
E generator(int index),
{bool growable: true}
)

例子:

Row(
                  children: List.generate(
                    10,
                        (index) => Container(
                      width: 200,
                      height: 200,
                      margin: EdgeInsets.all(16),
                      color: Colors.grey[300],
                      child: Center(
                        child: Text(
                          'Inner $index',
                          style: TextStyle(fontSize: 24),
                        ),
                      ),
                    ),
                  ),
                )

List.from 和 .of 之间以及 Map.from 和 .of 之间的区别

from 和 of 方法的重要区别是后者有类型注解,前者有类型注解不要.由于 Dart 泛型被具体化并且 Dart 2 是强类型的,因此这是确保 List/Map 正确构造的关键

var foo = new List.from(<int>[1, 2, 3]); // List<dynamic>
var bar = new List.of(<int>[1, 2, 3]); // List<int>

常用属性:

1.add 增加
2.addAll 拼接数组
3.indexOf 查找 传入具体值
4.remove 删除 传入具体值
5.removeAt 删除 传入索引值
6.fillRange 修改
7.insert(index,value) 指定位置插入
8.insertAll(index,value) 指定位置插入数组
9.toList 其他类型转换为List类型

10.first 获取数组第一个元素   last最后一个
 

参考:http://t.csdn.cn/XsJAi 

数组去重:百度安全验证文章来源地址https://www.toymoban.com/news/detail-715384.html

到了这里,关于Flutter中Map、List数组的常用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis双重foreach实现遍历map中的两个list数组

    前端传值时可能会有多个字段传递过来,需要后台将这多个字段拼接为 name in (? , ?) and name1 in (? , ?) and name2 in (? , ?) 作为sql查询条件…如下图sql语句,即实现多个and xxx in(?,?,?) 拼接 前端传递的是json字符串,json中name和infos是一对具有对应关系的对象,且json中会有多条这种对象

    2024年02月15日
    浏览(27)
  • 判断List、Map集合是否为空的方法

    1.判断List集合是否为空 1.1List集合已经完成初始化  这里的List集合已经完成了初始化操作,相当于是一个瓶子可以装水了,但是此时还没有水。  控制台输出:List is empty.  1.2List集合未完成初始化  这里的List集合,还没有进行初始化,相当于瓶子还不存在,用list.isEmpty()会产

    2024年02月15日
    浏览(46)
  • 使用Map.clear()、List.clear()方法,清空时注意!

    对 Map、List 对象进行清空操作时,常常会使用 clear() 方法。 例如,清空 Map 换做 List 也是同样的用法 本文想要说的是,需要注意,如果使用clear()方法, Map被清空的同时,原本对Map的引用会一起被清空!!! 代码举例: 这段代码也很简单,两层循环。 最里层向 listTemp 中添加

    2024年01月20日
    浏览(35)
  • int[]数组转Integer[]、List、Map「结合leetcode:第414题 第三大的数、第169题 多数元素 介绍」

    输出: 众所周知,将普通数组转为List集合,可以通过JDK提供的诸多方法来减轻我们的编码负担,所以接下来小名借用两个leetcode题中的场景来分享下数组转集合的使用方法: 看到开头的 「int[ ]转Integer[ ]」 可能有的小伙伴并不知道什么情况会用。当然平日开发我们断然不会

    2024年02月14日
    浏览(36)
  • Java中的Set、List、Map的区别及主要实现类方法

    数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。 JAVA集合主要分为三种类型: Set (集) L

    2024年04月12日
    浏览(34)
  • <List<Map<String,String>>> 删除元素常见的误区以及删除方法

    看到这么标题可能觉得这个真是太easy了,不就remove吗,分分钟搞定。 但结果却出乎意料,下面我们来j简单说说list删除数据可能遇到的坑: 先说明我们可能会遇到的两个问题: 1.java.lang.IndexOutOfBoundsException(索引越界) 2.java.util.ConcurrentModificationException(并发修改异常) 开始测试

    2024年02月12日
    浏览(34)
  • Scala的集合操作之可变数组和不可变数组,可变List集合与不可变List集合,可变Set与不可变Set操作,可变和不可变Map集合和元组操作

    for推导式的用法 Scala中的for推导式是一种用于对集合进行迭代和转换的强大工具。它提供了一种简洁的语法来处理集合中的元素,并生成新的集合或执行特定的操作。 for推导式的基本语法如下: 其中, pattern 是一个模式,用于解构集合中的元素, collection 是要遍历的集合。

    2024年02月10日
    浏览(42)
  • 【Java List与Map】List<T> Map与Map List<T>的区别(126)

    List<T> Map :List里面的数据类型包含Map; Map List<T> :Map里面value的数据类型包含List; 测试案例 : 测试输出 :

    2024年02月11日
    浏览(28)
  • Java Stream流 List< T >转换Map方法汇总合集(大概是最全吧)

    本文主要介绍 Java 中利用 Stream 流将 List T 类型数据转换成 Map 类型的几种方法整合汇总,其中包含了toMap()、groupingBy()、partitioningBy()等方法的使用,建议收藏方便查阅,如果有帮助到您,不要吝啬点赞、收藏! tips:本文没有推荐使用三方类库提供的 List 转 Map 工具类方法,因

    2024年02月04日
    浏览(32)
  • java中,将List<Map>转为List<实体>或者List<实体>转为List<Map>

    1、ListMap转List实体  2、List实体转ListMap

    2024年01月24日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包