Flutter List数组避免插入重复数据的实现

 更新时间:2020年09月04日 14:24:49   作者:唇红白齿  
这篇文章主要介绍了Flutter List数组避免插入重复数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

List

具有一定长度存在索引的对象集合(长度为0不存在索引,长度>0存在索引)

常见列表

1、定长列表

默认值null

例如:List<int> fixedLengthList = new List(2)、List<int> fixedLengthList = new List(8)

List<int> fixedLengthList = new List(2);
for(int i=0;i<2;i++){
  print("索引为${i}的值${fixedLengthList[i]}");
}

I/flutter ( 9251): 索引为0的值null
I/flutter ( 9251): 索引为1的值null

固定长度不可修改 

List<int> fixedLengthList = new List(2);
//改变固定数组长度
fixedLengthList.length=30;

Unsupported operation: Cannot change the length of a fixed-length list

大概意思:无法更改固定长度数组的长度

List<int> fixedLengthList = new List(2);
///执行添加数据操作
fixedLengthList.add(0);
fixedLengthList.add(1);
List<int> fixedLengthList = new List(2);
  fixedLengthList[0]=1;
  fixedLengthList[1]=2;
///添加数据
fixedLengthList.addAll([3,4]);

Unsupported operation: Cannot add to a fixed-length list
大概以上: 不能添加数据到固定长度数组 

List<int> fixedLengthList = new List(2);
//执行插入数据
fixedLengthList.insert(0, 0);

Unsupported operation: Cannot add to a fixed-length list
大概意思: 不能添加数据到固定长度数组  

 List<int> fixedLengthList = new List(2);
  ///执行删除操作
  fixedLengthList.removeLast();
List<int> fixedLengthList = new List(2);
  ///执行删除操作
  fixedLengthList.removeAt(0);
 List<int> fixedLengthList = new List(2);
  fixedLengthList[0]=1;
  fixedLengthList[1]=2;
///删除包含索引0和1范围内数据
fixedLengthList.removeRange(0, 1);
List<int> fixedLengthList = new List(2);
  fixedLengthList[0]=1;
  fixedLengthList[1]=2;
///删除索引0-1,然后在进行替换删除索引值
fixedLengthList.replaceRange(0, 1, [3,4]);

Unsupported operation: Cannot remove from a fixed-length list
大概意思:不能删除固定长度数组数据

List<int> fixedLengthList = new List(2);
///执行清除数据操作
fixedLengthList.clear();

Unsupported operation: Cannot clear a fixed-length list
大概意思:不能清理固定长度数组数据

可排序、替换、截取

List<int> fixedLengthList = new List(2);
fixedLengthList[0]=1;
fixedLengthList[1]=2;

///执行截取指定范围的数组
fixedLengthList.sublist(0);
///排序
fixedLengthList..sort((a, b) => a.compareTo(b));
///
fixedLengthList.setRange(0, 1, [3,4],0);
///索引0-1范围的值不包括1,修改成3
fixedLengthList.fillRange(0, 1,3);

2、可增长列表 

可改变数组长度、 可执行添加、删除、可排序、可替换、可截取

.可增长列表[]保留了内部缓冲区

.缓冲区可增长

.添加数据操作在固定时间内执行 (设置固定长度会花费与新长度成比例的时间,修改容量,添加操作将需要立即增加缓冲区容量)

.列表是可以迭代的

.在执行列表操作时,例如在调用forEachsort期间,通常不允许修改列表的长度(添加或删除元素)

.通过直接迭代列表或通过迭代由列表支持的Iterable更改列表的长度,可以中断迭代

List<int> fixedLengthList = [];

  //改变数组长度
  fixedLengthList.length=2;
  ///执行添加数据操作
  fixedLengthList.add(0);
  fixedLengthList.add(1);
  fixedLengthList[0]=1;
  fixedLengthList[1]=2;
  ///添加数据
  fixedLengthList.addAll([3,4]);
  //执行插入数据
  fixedLengthList.insert(0, 0);
  ///执行删除操作
  fixedLengthList.removeLast();
  ///执行删除操作
  fixedLengthList.removeAt(0);
  ///删除包含索引0和1范围内数据
  fixedLengthList.removeRange(0, 1);
  ///删除索引0-1,然后在进行替换删除索引值
  fixedLengthList.replaceRange(0, 1, [3,4]);

  fixedLengthList.sublist(0);
  fixedLengthList..sort((a, b) => a.compareTo(b));
  fixedLengthList.setRange(0, 1, [3,4],0);
  fixedLengthList.fillRange(0, 1,3);

  ///执行清除数据操作
  fixedLengthList.clear();

3、contains 过滤重复 添加(int、double、bool、String)类型数据

1、int类型数组中插入重复数据 

List<int> listInts = [];

 void addIntData(int addValue){
  bool isContainer=listInts.contains(addValue);
  if(!isContainer){
   listInts.add(addValue);
  }
  print("数组长度${listInts.length}");
 }

I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1 

 2、double类型数组中插入重复数据

List<double> listDouble = [];

 void addDoubleData(double addValue){
  bool isContainer=listDouble.contains(addValue);
  if(!isContainer){
   listDouble.add(addValue);
  }
  print("数组长度${listDouble.length}");
 }

I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1

3、String类型数组中插入重复数据

 List<String> listStrings = [];

 void addStringData(String addValue){
  bool isContainer=listStrings.contains(addValue);
  if(!isContainer){
   listStrings.add(addValue);
  }
  print("数组长度${listStrings.length}");
 }

I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1 

4、boolean类型数组插入重复数据

 List<bool> listBool = [];

 void addBoolData(bool addValue){
  bool isContainer=listBool.contains(addValue);
  if(!isContainer){
   listBool.add(addValue);
  }
  print("数组长度${listBool.length}");
 }

I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1
I/flutter (28028): 数组长度1

4、List对象去重

class A{
 String a;
 int b;

 A(this.a, this.b);
}

1、要添加的对象A的每个值和数组里面存在的每个对象的值做比较 (效率低、适合少量数据去重)

 List<A> listAs = [];

 void addAData(A addValue){

  int length=listAs.length;
  if(length==0){
   listAs.add(addValue);
  }else {
   for (int i = 0; i < length; i++) {
    A a = listAs[i];
    if (a.a != addValue.a && a.b != addValue.b) {
     listAs.add(addValue);
    }
   }
  }
  print("数组长度${listAs.length}");
 }

2、List配合Set去除重复对象

List<A> listAs = [];
Set<A> setAs=new Set<A>();

void addASData(A addValue){
  if(listAs.length==0) {
   listAs.add(addValue);
   setAs.addAll(listAs);
  }else{
   listAs.add(addValue);
  }
  List<A> list=setAs.toList();
  print("数组长度${list.length}");
}
addASData(new A("a", 0));

I/flutter (10386): 数组长度1
I/flutter (10386): 数组长度1
I/flutter (10386): 数组长度1
I/flutter (10386): 数组长度1
I/flutter (10386): 数组长度1
I/flutter (10386): 数组长度1

参考:

list :https://api.dart.dev/stable/2.9.2/dart-core/List-class.html

Set:https://api.dart.dev/stable/2.9.2/dart-core/Set-class.html 

到此这篇关于Flutter List数组避免插入重复数据的实现的文章就介绍到这了,更多相关Flutter List 重复插入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android 中三种启用线程的方法总结

    Android 中三种启用线程的方法总结

    下面小编就为大家带来一篇Android 中三种启用线程的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Android Web3j OOM解决详解

    Android Web3j OOM解决详解

    这篇文章主要介绍了Android Web3j OOM解决详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Android UI设计与开发之ViewPager介绍和简单实现引导界面

    Android UI设计与开发之ViewPager介绍和简单实现引导界面

    这篇文章主要为大家详细介绍了Android UI设计与开发之ViewPager介绍和简单实现引导界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android实现整理PackageManager获取所有安装程序信息

    Android实现整理PackageManager获取所有安装程序信息

    这篇文章主要介绍了Android实现整理PackageManager获取所有安装程序信息的方法,实例分析了Android使用PackageManager获取安装程序信息的具体步骤与相关技巧,需要的朋友可以参考下
    2016-01-01
  • Android获取SDcard目录及创建文件夹的方法

    Android获取SDcard目录及创建文件夹的方法

    今天小编就为大家分享一篇Android获取SDcard目录及创建文件夹的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Android给图片加文字和图片水印实例代码

    Android给图片加文字和图片水印实例代码

    本篇文章主要介绍了Android给图片加文字和图片水印实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Android调用OpenCV2.4.10实现二维码区域定位

    Android调用OpenCV2.4.10实现二维码区域定位

    这篇文章主要为大家详细介绍了Android调用OpenCV 2.4.10实现二维码区域定位,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Android getSystemService用法实例总结

    Android getSystemService用法实例总结

    这篇文章主要介绍了Android getSystemService用法,结合实例形式总结分析了getSystemService获取系统Service的相关使用方法与注意事项,需要的朋友可以参考下
    2016-01-01
  • Android Drawable必备知识小结

    Android Drawable必备知识小结

    这篇文章主要为大家详细了Android Drawable必备基础知识 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Android中的Bmob移动后端云服务器功能

    Android中的Bmob移动后端云服务器功能

    这里介绍一个移动后端云服务器平台bmob,这不仅可以实现云数据库储存,还可以获取手机验证等,随时随地都很轻松,下面写一个小demo,实现一个登陆注册功能,认识增删查改
    2018-01-01

最新评论