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 重复插入内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用flutter实现炫酷的list

    前言 使用了flutter一段时间,越来越喜欢flutter了,flutter比我们想象中的强大.这篇文章介绍了怎么使用flutter来展示一个很漂亮的list,先看下效果图. 样式还是很漂亮的,下面我们一步一步完成这个小项目. 开发前准备 我们会用到加载网络图片FadeInImage这么个widget,需要一个loading的icon,所以需要在pubspec.yaml里配置下静态资源,只有配置过的静态资源才可以在项目中使用 assets: - assets/images/ 需要mock一些假

  • Flutter中ListView 的使用示例

    这个小例子使用的是豆瓣 API 中 正在上映的电影 的开放接口,要实现的主要效果如下: JSON 数据结构 Item 结构 Item 的结构是一个 Card 包含着一个 Row 然后这个 Row 里面左边是一个 Image ,右边是一个 Column 功能实现 material 库 Json 解析 网络请求 加载菊花 要实现上面四个功能,我们首先需要在 .dart 文件中引入如下代码 import 'dart:convert'; import 'package:http/http.dart' a

  • Flutter ListView 上拉加载更多下拉刷新功能实现方法

    先上图 下拉刷新 跟原生开发一样,下拉刷新在flutter里提供的有组件实现 RefreshIndicator 一直不明白为啥组件中都提供下拉刷新,但就是没有上拉加载!! 我这请求接口数据用的是 http 库,是个第三方的是需要安装的 https://pub.dev/packages/http 用法如下 class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override MyHo

  • Flutter 系统是如何实现ExpansionPanelList的示例代码

    在了解ExpansionPanelList实现前,先来了解下MergeableMaterial,它展示多个MergeableMaterialItem组件,当子组件发生变化时,以动画的方式打开或者关闭子组件,MergeableMaterial的父控件需要在主轴方向是一个没有限制的控件,比如SingleChildScrollView.Row.Column等. 基本用法如下: SingleChildScrollView( child: MergeableMaterial( children: [ Ma

  • android使用flutter的ListView实现滚动列表的示例代码

    现如今打开一个 App,比如头条.微博,都会有长列表,随着我们不断地滑动,视窗内的内容也会不断地更新.今天就用 Flutter 实现一下这种效果. 这里的表现其实就相当于有一个固定长度的容器,然后超出的内容是不可见的,只有当你向上或向下滑动屏幕时,视窗外看不见的内容才会出现在视窗中.如果在 web 开发时,是需要容器加上样式 overflow: auto; 要想用 Flutter 实现,其实也是很简单的,因为 Flutter 为我们提供了 ListView 组件. ListView 主要有以下几

  • 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}的值${f

  • Vue.js在数组中插入重复数据的实现代码

    1.在默认的情况下,Vue.js默认不支持往数组中加入重复的数据.可以使用track-by="$index"来实现. 2.不使用track-by="$index"的数组插入,数组不支持重复数据的插入 2.1  JavaScript代码 <script type="text/javascript" src="../js/vue-1.0.21.js"></script> <script type=&q

  • SQLServer中防止并发插入重复数据的方法详解

    SQLServer中防止并发插入重复数据,大致有以下几种方法: 1.使用Primary Key,Unique Key等在数据库层面让重复数据无法插入. 2.插入时使用条件 insert into Table(****) select **** where not exists(select 1 from Table where ****); 3.使用SERIALIZABLE隔离级别,并且使用updlock或者xlock锁提示(等效于在默认隔离级别下使用(updlock,holdlock)或(xl

  • Java实现数组去除重复数据的方法详解

    本文实例讲述了Java实现数组去除重复数据的方法.分享给大家供大家参考,具体如下: 前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现,有好多方法可以实现,现在就总结一下,比较简单的几种. 一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<s

  • JS数组去掉重复数据只保留一条的实现代码

    非常不多说,js数组去掉重复数据的代码如下所示: var arr = [1,2,3,4,5,6,1,6,7,2]; var newArr = []; for(var i =0;i<arr.length-1;i++){ if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); } } 下面再给大家分享高效率去掉js数组中重复项 Array类型并没有提供去重复的方法,如果要把数组的重复元素干掉,那得自己想办法: function unique(ar

  • JavaScript使用二分查找算法在数组中查找数据的方法

    本文实例讲述了JavaScript使用二分查找算法在数组中查找数据的方法.分享给大家供大家参考.具体分析如下: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一

  • java获取两个数组中不同数据的方法

    本文实例讲述了java获取两个数组中不同数据的方法.分享给大家供大家参考.具体实现方法如下: public static <T> List<T> compare(T[] t1, T[] t2) { List<T> list1 = Arrays.asList(t1); List<T> list2 = new ArrayList<T>(); for (T t : t2) { if (!list1.contains(t)) { list2.add(t)

  • Java替换int数组中重复数据的方法示例

    本文实例讲述了Java替换int数组中重复数据的方法.分享给大家供大家参考,具体如下: package test; import java.util.HashSet; public class TestList { /** * 根据传递过来的参数过滤掉重复数据 * @param number:需要过滤掉的数据 * @return:筛选好的新数组 */ public static int[] Filter(int[] number){ HashSet<Integer> hs=new HashSe

  • JS求多个数组的重复数据

    今天朋友问了我这个问题:JS求多个数组的重复数据  注: 1.更准确的说是只要多个数组中有两个以上的重复数据,那么这个数据就是我需要的 2.单个数组内的数据不存在重复值(当然如果有的话,你可以去重) 3.耗时问题,这一点很重要 源代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获取多个数组中的重复数据<

  • 浅谈C#各种数组直接的数据复制/转换

    之前做Opengl程序,用的的C#的SharpGL这个库,里面有各种奇怪绑定的函数,比如原型为: void glInterleavedArrays(uint format, int stride, void * pointer); 的函数被他绑定成: private static extern void glInterleavedArrays(uint format, int stride, int[] pointer); 然后我就被逼着学习了各种float[] 转 int[] 的方法,比较他们

随机推荐