您好,登錄后才能下訂單哦!
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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。