Flutter List數組避免插入重複數據

志當存高遠。——諸葛亮

 List

具備必定長度存在索引的對象集合(長度爲0不存在索引,長度>0存在索引)html

常見列表

一、定長列表

默認值nullapi

例如: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

 

 

固定長度不可修改 this

List<int> fixedLengthList = new List(2);
//改變固定數組長度
fixedLengthList.length=30;

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

大概意思:沒法更改固定長度數組的長度3d

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
大概以上: 不能添加數據到固定長度數組 
code

List<int> fixedLengthList = new List(2);
//執行插入數據
fixedLengthList.insert(0, 0);

Unsupported operation: Cannot add to a fixed-length list
大概意思: 不能添加數據到固定長度數組  
htm

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
大概意思:不能清理固定長度數組數據
blog

可排序、替換、截取

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);

二、可增加列表 

可改變數組長度、 可執行添加、刪除、可排序、可替換、可截取

.可增加列表[]保留了內部緩衝區

.緩衝區可增加

.添加數據操做在固定時間內執行 (設置固定長度會花費與新長度成比例的時間,修改容量,添加操做將須要當即增長緩衝區容量)

.列表是能夠迭代的

.在執行列表操做時,例如在調用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();

三、contains 過濾重複 添加

(int、double、bool、String)類型數據

一、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 

 二、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
 



三、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
 



四、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
 




四、List對象去重 

class A{
  String a;
  int b;

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

一、要添加的對象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}");
  }

二、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 

相關文章
相關標籤/搜索