您好,登录后才能下订单哦!
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、可增长列表
可改变数组长度、 可执行添加、删除、可排序、可替换、可截取
.可增长列表[]保留了内部缓冲区
.缓冲区可增长
.添加数据操作在固定时间内执行 (设置固定长度会花费与新长度成比例的时间,修改容量,添加操作将需要立即增加缓冲区容量)
.列表是可以迭代的
.在执行列表操作时,例如在调用forEach或sort期间,通常不允许修改列表的长度(添加或删除元素)
.通过直接迭代列表或通过迭代由列表支持的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
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。