flutter中list相关操作汇总(有这一篇就够啦)
要說,List在我的開發使用中,確實是最為頻繁的了,那么如何使用list,也就成了一個問題,list提供的方法又有哪些
這些都是需要掌握理解的。
首先第一個,
對于固定長度的list,如何刪除添加元素呢
void main() {// 聲明一個固定長度的集合List<int> numList = List(5);numList[0] = 1;numList[1] = 2;numList[2] = 3;numList[3] = 4;numList[4] = 5;print('遍歷元素:');for (int value in numList) {print(value);}print('----更新第一個元素為 10------');numList[0] = 10;print('遍歷元素:');numList.forEach((value) => print(value));print('----將第一個元素置為NULL---');numList[0] = null;print('遍歷元素:');for (int i = 0; i < numList.length; i++) {print('${numList[i]}');} }動態長度的 List
我們直接看示例:對于動態長度的list,
聲明一:
void main() {// 動態長度的 集合List<int> list = List();list.add(1);list.add(2);list.forEach((value) => print('$value'));print('');list.removeAt(0);list.forEach((value) => print('$value'));print('');list.add(3);list[0] = null;list.forEach((value) => print('$value')); }聲明二:
// 這樣也是一個動態的集合List<String> letterList = ["A", "B", "C"];letterList.add("D");letterList.add("E");letterList.forEach((letter) => print('$letter'));循環遍歷 List 中的數據
///代碼清單 1-1 List<String> testList = ["test1", "xioming", "張三", "xioming", "張三", "李四"];///方式一 遍歷獲取List中的所有數據 testList.forEach((value) {//value 就是List中對應的值 });///方式二 遍歷獲取List中的所有的數據 for(int i=0;i<testList.length;i++){///根據索引獲取List中的數據var value = testList[i]; }//方式三 //while+iterator迭代器遍歷,類似Java中的iteator while(testList.iterator.moveNext()) {//獲取對應的值var value = testList.iterator.current;}//方式四 增強for循環 //for-in遍歷 for (var value in testList) {//value 就是List中對應的值 }List 數據轉 Map 數據
///代碼清單 1-2 List<String> testList = ["test1", "xioming", "張三", "xioming", "張三", "李四"];print(testList); //[test1, xioming, 張三, xioming, 張三, 李四]//將list轉為set,將后面重復的都去掉Map<int,String> map = testList.asMap();print(map); //{0: test1, 1: xioming, 2: 張三, 3: xioming, 4: 張三, 5: 李四}連接 List 中的數據
///代碼清單 1-3 List<String> testList = ["A", "D", "F", "F","B", "C",];print(testList); //[A, D, F, F, B, C]///用指定的字符將List中每個元素都連接起來,返回一個字符串/// 如這里將 List 中的數據 使用 , 號來連接String value = testList.join(",");print(value);///A,D,F,F,B,C合并 List 中的數據
通過 List 的 followedBy 方法,可以合并 多個 List中的數據至一個 Iterable中,如下代碼所示:
///代碼清單 1-4///創建一個 List 并添加初始化數據List<int> list = [1,2,3,4];///創建一個 List并添加初始化數據List<int> list2 = [2,3,4,5];///將兩個 List 中的數據合并成一個 IterableIterable<int> lsit3=list2.followedBy(list);print("list: "+list.toString());//list: [1, 2, 3, 4]print("list2: "+list2.toString());//list2: [2, 3, 4, 5]print("list3: "+lsit3.toString());//list3: (2, 3, 4, 5, 1, 2, 3, 4)隨機排列 List中的數據順序
///代碼清單 1-5List<String> testList = ["test1", "xioming", "張三", "xioming", "張三", "李四"];print(testList); //[test1, xioming, 張三, xioming, 張三, 李四]//將list中數據 重新隨機排列testList.shuffle();print(testList); //[test1, xioming, xioming, 李四, 張三, 張三]升序排列 List 中的數據
///代碼清單 1-6List<String> testList = ["A", "D", "F", "F","B", "C",];print(testList); //[A, D, F, F, B, C]///升序排列testList.sort();print(testList);//[A, B, C, D, F, F]去重復
在 List 中保存的數據是允許重復的,通過 toSet 方法 將List轉為Set ,可去除后面重復的元素,如下所示:
///代碼清單 1-7List<String> testList = ["test1", "xioming", "張三", "xioming", "張三", "李四"];print(testList); //[test1, xioming, 張三, xioming, 張三, 李四]//將list轉為set,將后面重復的都去掉Set<String> set = testList.toSet();print(set); //{test1, xioming, 張三, 李四}查找 List 中的元素
List<String> list = ["test1", "xioming", "張三","xioming", "張三","李四"];///從索引0處開始查找指定元素,返回指定元素的索引int index = list.indexOf("張三"); ///index 2//////從索引0處開始查找指定元素,如果存在返回元素索引,否則返回-1int index2 = list.indexOf("張三",3); /// 4/// ///從后往前查找,返回查找到的第一個元素的索引int index4 = list.lastIndexOf("張三");/// 4獲取 List 中指定位置的值
///直接根據索引獲取 0 號位置上的數據String value = list[0];/// 等效于 elementAt 方法獲取String value1 = list.elementAt(0);List 中數據修改
List中的數據修改操作方法就比較簡單,如下代碼清單 4-1所示:
///代碼清單 1-10List<String> list = ["test1", "xioming", "張三", "李四"];print("list: " + list.toString()); //list: [test1, xioming, 張三, 李四]///修改數據list[0] = "測試數據";print("list: " + list.toString()); //list: [測試數據, xioming, 張三, 李四]通過 setRange 方法批量修改一定范圍的數據,如下代碼清單 4-2 所示:
///代碼清單 1-11List<String> list = ["test1", "xioming", "張三", "李四"];print("list: " + list.toString()); //list: [test1, xioming, 張三, 李四]///修改 索引范圍為 [0,2) 也就是修改了 0號位與1號位上的元素list.setRange(0, 2, list2);print("list: " + list.toString()); //list: [223, 35, 張三, 李四]List 中數據刪除
刪除 List中1個元素,如下代碼清單3-1 所示:
///代碼清單 1-12///創建一個 List 并添加初始化數據List<String> list = ["test1", "xioming", "張三", "李四"];///移除最后一個元素list.removeLast();///移除指定索引位置的元素 如這里指定的 2號位置list.removeAt(2);///移除List 中指定的元素list.remove("張三");通過 removeRange 方法可刪除 List 中指定范圍的多個元素,這個范圍是連續的,如下代碼清單3-2所示:
///代碼清單 1-13 ///創建一個 List 并添加初始化數據List<String> list = ["test1", "xioming", "張三", "李四"];print("list: " + list.toString()); //list: [test1, xioming, 張三, 李四]///移除指定 索引區域的元素///如這里移除索引范圍為 [0,2) 也就是移除了 0號位與1號位上的元素list.removeRange(0, 2);通過 removeWhere 方法可刪除滿足一定條件的元素數據,如下代碼清單3-3所示:
///代碼清單 1-14///創建一個 List 并添加初始化數據List<String> list = ["test1", "xioming", "張三", "李四"];print("list: " + list.toString()); //list: [test1, xioming, 張三, 李四]// 從List中中刪除滿足條件的所有對象。list.removeWhere((item){///在這里 張三, 李四 的 length 分別為2 ,滿足條件 所以會被刪除return item.length == 2;});print("list: " + list.toString()); //list: [test1, xioming]通過 clear 方法可清空 List,也就是刪除List中的所有的數據。
list.clear();Set
Set 是無序的;Set 是不允許添加重復元素;Set 不能使用下標來獲取里面里面的元素,因為它是無序 的。
void main() {// 方式一:Set<String> letterSet = Set.from(["A", "B", "C"]);letterSet.add("D");letterSet.add("E");// 重復的元素將被忽視letterSet.add("A");// 使用 for..in.. 遍歷 Setfor (String letter in letterSet) {print('$letter');}print('');// 方式二:Set<int> numSet = Set();numSet.add(0);numSet.add(1);numSet.add(2);// 使用 Lambda 遍歷 SetnumSet.forEach((value) => print('$value')); }Map
Dart 中 Map 的特性和 Java 中的類似,都是以鍵值對的形式存放,Map 中的鍵是唯一的,但是值可以重復,Map 也是無序的。
下面看看 Dart 中 Map 的基本操作:
void main() {Map<String, String> letterMap = Map();letterMap["a"] = "A";letterMap["b"] = "B";letterMap["c"] = "C";// 檢查是否存在某個 keyletterMap.containsKey("a");// 更新某個 key 對應的 value,注意 value 為一個 Lambda 表達式letterMap.update("a", (value) => "${value}AA");// 獲取 Map 的長度letterMap.length;// 刪除 Map 中的某個元素letterMap.remove("c");// 清空 MapletterMap.clear();// 遍歷所有的 keyfor (String key in letterMap.keys) {print('$key');}print('');// 遍歷所有的 valuefor (String value in letterMap.values) {print('$value');}print('');// 遍歷所有的 key-valueletterMap.forEach((key, value) => print('$key == $value')); }上述代碼中使用的是構造方法的方式來創建 Map,我們還可以使用一下方式來創建:
Map<String, int> studentScoreMap = {"Jack": 90,"Rost": 100,"Mary": 30,"LiLei": 56};studentScoreMap.forEach((name, source) => print('$name == $source'));Callable
Callable 能讓我們像調用方法一樣調用某個類,不過我們在類中需要實現 call 方法:
void main() {var personOne = Person();var info = personOne("Jack", 18);print('$info'); }class Person {// 實現 call 方法String call(String name, int age) {return "$name is $age years old";} }總結
以上是生活随笔為你收集整理的flutter中list相关操作汇总(有这一篇就够啦)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux环境搭建 手把手教你配置Lin
- 下一篇: [flutter专题]详解AppBar小