Dart 語法學(xué)習(xí)目錄
第一節(jié): Dart 語法了解,認(rèn)識變量,常量,數(shù)據(jù)類型
第二節(jié): Dart 操作符(運算符)
第三節(jié): Dart 中常用集合 List/Map
第四節(jié): Dart 函數(shù)使用,聲明函數(shù)/匿名函數(shù)/可選參數(shù)/作用域/閉包
第五節(jié): Dart 面向?qū)ο?構(gòu)造函數(shù)/靜態(tài)屬性
第六節(jié): Dart中抽象類abstract/接口implements/混入Mixin
第七節(jié): Dart中泛型/泛型定義與使用
第八節(jié): Dart 中的庫/自定義庫/內(nèi)置庫/第三方庫
Dart 附帶了核心集合 API ,其中包括 list ,set 和 map 類。
1. List
lists 可以通過字面量來創(chuàng)建和初始化。 另外,也可以使用 List 的構(gòu)造函數(shù)。
1.1 List 列表的創(chuàng)建
void main(){
// 1\. 字面量創(chuàng)建列表
var list = ["蘋果","香蕉","橘子"];
print(list); // [蘋果, 香蕉, 橘子]
// 2\. 通過類創(chuàng)建列表
var list2 = new List();
print(list2); // []
}
List 類還定義了若干方法,用于向列表添加或刪除項目
接下來就讓我們好好學(xué)習(xí)一些List列表的屬性和方法
1.2 常用屬性
- length 長度
- isEmpty 是否 為空
- isNotEmpty 是否不為空
- reversed 翻轉(zhuǎn)
void main(){
// List 集合常用的屬性
// 1\. 定義集合
var list = ["蘋果","香蕉","橘子"];
print(list);
// 2\. 集合的屬性
print(list.length); //打印集合的長度
print(list.isEmpty); // 判斷集合是否為空, 為空返回true,否則返回false
print(list.isNotEmpty); // 判斷及時是否不為空, 不為空返回true,否則返回false
print(list.reversed); // 集合倒敘,注意倒敘完后返回的不在是一個集合
/*
打印結(jié)果
3
false
true
(橘子, 香蕉, 蘋果)
*/
// 3\. 我們發(fā)現(xiàn)集合翻轉(zhuǎn)(倒敘后不像是一個集合,如果需要倒敘后依然返回一個集合)
// toList 方法是將其他類型轉(zhuǎn)為List 集合類型
var listReverse = list.reversed.toList();
print(listReverse); // 打印: [橘子, 香蕉, 蘋果]
}
1.3 常用方法
1.3.1. 添加內(nèi)容
- add 增加
- addAll 拼接數(shù)組
void main(){
// List 集合常用的屬性
// 1\. 定義集合
var list = ["蘋果","香蕉","橘子"];
print(list);
// 2\. 常用方法
// 2.1 添加內(nèi)容
// add 方法一次只能添加一個集合內(nèi)容
// list.add("西瓜");
// print(list); // [蘋果, 香蕉, 橘子, 西瓜]
// addAll 方法參數(shù)是一個集合, 集合的拼接
list.addAll(["西瓜","梨子"]);
print(list); // [蘋果, 香蕉, 橘子, 西瓜, 梨子]
}
1.3.2. 查詢集合內(nèi)容的索引
- indexOf 查找索引,參數(shù)為具體內(nèi)容
void main(){
// List 集合常用的屬性
// 1\. 定義集合
var list = ["蘋果","香蕉","橘子"];
print(list);
// 2\. 常用方法
// 2.2 查詢集合內(nèi)容的索引
var index = list.indexOf("香蕉");
print(index); // 1
print(index is int); // 判斷是不是數(shù)字類型, 結(jié)果為true
}
1.3.3. 刪除內(nèi)容
- remove 刪除 參數(shù)具體的內(nèi)容
- removeAt 刪除, 參數(shù)為索引值
void main(){
// List 集合常用的屬性
// 1\. 定義集合
var list = ["蘋果","香蕉","橘子"];
print(list); // [蘋果, 香蕉, 橘子]
// 2\. 常用方法
// 2.3 刪除集合內(nèi)容
// 通過集合內(nèi)容刪除 remove
// list.remove("香蕉");
// print(list); // [蘋果, 橘子]
// remove 方法只會刪除第一個匹配的內(nèi)容, 如果有多個相同的內(nèi)容,后面的不會被刪除
// 通過索引刪除內(nèi)容
list.removeAt(2);
print(list); // [蘋果, 香蕉]
}
1.3.4. 填充集合內(nèi)容
- fillRange 填充內(nèi)容
語法
list.fillRange(start, end, value);
參數(shù)
- star 開始修改的位置
- end 結(jié)束修改的位置(不包括結(jié)束位置)
- value 修改的內(nèi)容
void main(){
// List 集合常用的屬性
// 1\. 定義集合
var list = ["蘋果","香蕉","橘子"];
print(list); // [蘋果, 香蕉, 橘子]
// 2\. 常用方法
// 2.4 修改集合內(nèi)容
// 修改一個內(nèi)容
// list.fillRange(1,2, '西瓜');
// print(list) ; //[蘋果, 西瓜, 橘子]
// 修改多個內(nèi)容
// list.fillRange(1,3, '西瓜');
// print(list) ; // [蘋果, 西瓜, 西瓜]
}
1.3.5. 插入內(nèi)容
insert(index,value) 指定位置插入
insertAll(index,list) 指定位置插入List
void main(){
// List 集合常用的屬性
// 1\. 定義集合
var list = ["蘋果","香蕉","橘子"];
print(list); // [蘋果, 香蕉, 橘子]
// 2\. 常用方法
// 2.5 插入內(nèi)容
// 插入一個內(nèi)容
// list.insert(1,"西瓜");
// print(list); // [蘋果, 西瓜, 香蕉, 橘子]
// 插入多個內(nèi)容
list.insertAll(1, ['西瓜',"梨子"]);
print(list) ; // [蘋果, 西瓜, 梨子, 香蕉, 橘子]
}
1.3.6. 集合與字符串之間相互轉(zhuǎn)換
toList 其他類型轉(zhuǎn)換為List
join List轉(zhuǎn)換成字符串
split 字符串轉(zhuǎn)為List
void main(){
// List 集合常用的屬性
// 1\. 定義集合
var list = ["蘋果","香蕉","橘子"];
print(list); // [蘋果, 香蕉, 橘子]
// 2\. 常用方法
// 2.6 集合與其他內(nèi)容相互轉(zhuǎn)換
// 集合轉(zhuǎn)為字符串
String str = list.join("-");
print(str); // 蘋果-香蕉-橘子
print(str is String); // 判斷是不是字符串類型 true
// 將字符串轉(zhuǎn)為List
String strr = "你好,師兄,歡迎來到北京";
List list2 = strr.split(",");
print(list2); // [你好, 師兄, 歡迎來到北京]
}
1.3.7. 循環(huán)方法
- forEach
- map
- where
- any
- every
示例:
void main(){
// List 循環(huán)
// 1\. 創(chuàng)建List
List list = ["蘋果","梨子","香蕉"];
print(list); // [蘋果, 梨子, 香蕉]
// 2\. 循環(huán)方法
// 2.1 普通for循環(huán)
// for(var i = 0 ;i < list.length;i++){
// print(list[i]);
// }
/*
蘋果
梨子
香蕉
*/
// 2.2 for ... in 循環(huán)
// for(var value in list){
// print(value);
// }
/*
蘋果
梨子
香蕉
*/
// 2.3 forEach 循環(huán)
// list.forEach((value){
// // 接受一個參數(shù),集合的值
// print(value);
// });
/*
蘋果
梨子
香蕉
*/
// 2.4 map 映射
// var list2 = list.map((value){
// // print(value);
// return '$value:8元';
// });
// print(list2); // (蘋果:8元, 梨子:8元, 香蕉:8元)
// 注意map方法返回的不是集合
// 需要手動的轉(zhuǎn)為集合
// print(list2.toList()); // [蘋果:8元, 梨子:8元, 香蕉:8元]
// 2.5 where 篩選
// 類似于數(shù)組中的filter方法
// List ll = [1,3,5,9,6,8,1];
// var list3 = ll.where((value){
// return value >= 5;
// });
// print(list3); // (5, 9, 6, 8)
// 返回值不是集合,需要轉(zhuǎn)化
// print(list3.toList()); // [5, 9, 6, 8]
// 2.6 any 一些
// 只要有一個符合條件返回true,否則返回false
// List ll = [2,3,5,9,6,8,2];
// var bool = ll.any((value){
// return value > 3;
// });
// print(bool); // true
// var bool = ll.any((value){
// return value > 10;
// });
// print(bool); // 全部都不符合條件,返回false
// 2.7 every 每一個
// 必須所有的都符合條件才返回true,否則返回false
List ll = [2,3,5,9,6,8,2];
// var bool = ll.every((value){
// return value > 1 ;
// });
// print(bool); // true
var bool = ll.every((value){
return value > 3 ;
});
print(bool); // false
}
2. Set
Set 是沒有順序且不能重復(fù)的集合,所以不能通過索引去獲取值
2.1 set 基本用法
通過add方法給set添加內(nèi)容
void main(){
// Set
// 1\. Set的基本用法
var set = new Set();
set.add("西瓜"); // 添加內(nèi)容
set.add("蘋果");
set.add("西瓜"); // 注意set中不能用重復(fù)的內(nèi)容, 添加重復(fù)內(nèi)容也會去重
print(set); // {西瓜, 蘋果}
}
2.2 利用set處理list去重
因為set內(nèi)容不能重復(fù), 所以利用這個特性給list去重,
因此set主要的功能就是數(shù)組去重.
流程:
- list可以使用
toSet方法將list轉(zhuǎn)為set - 因為list特性會自動去重
- 在利用
toList方法將set轉(zhuǎn)回為list
void main(){
// 2\. 利用set去重
List list = ["蘋果","香蕉","橘子","香蕉","橘子","蘋果"];
// 2.1 利用toSet 轉(zhuǎn)為set
// var set = list.toSet();
// print(set); // {蘋果, 香蕉, 橘子}
// 2.2 先創(chuàng)建set, 在通過addAll方法將list轉(zhuǎn)為set 去重
var set = new Set();
set.addAll(list);
print(set); // {蘋果, 香蕉, 橘子}
// 將set轉(zhuǎn)為List
list = set.toList();
print(list); // [蘋果, 香蕉, 橘子] 去重后的list
}
3. Map
map 是一個無序的 key-value (鍵值對)集合,就是大家熟知的 dictionary 或者 hash。 map 將 kay 與 value 關(guān)聯(lián),以便于檢索。和 JavaScript 不同,Dart 對象不是 map 。
3.1 聲明map
聲明 map 可以使用簡潔的字面量語法,也可以使用傳統(tǒng)構(gòu)造函數(shù):
void main(){
// 1\. 字面量創(chuàng)建map
Map map = {
"name":"張三",
"age":18
};
print(map);
// 2\. 構(gòu)造函數(shù)創(chuàng)建map
// 注意map添加內(nèi)容不用使用.操作符,只能使用[]語法
Map map2 = new Map();
map2["name"] = "李四";
map2["age"] = 20;
print(map2);
}
3.2 常用屬性
- keys 獲取所有的key值
- values 獲取所有的value
- isEmpty 判斷是否為空
- isNotEmpty 判讀是否不為空
示例
void main(){
// Map
// 1\. 創(chuàng)建Map
Map map = {
"name":"張三",
"age":18
};
print(map); // {name: 張三, age: 18}
// 2\. 常用屬性
print(map.length); // 2
print(map.keys); // (name, age)
print(map.keys.toList()); // [name, age]
print(map.values.toList()); // [張三, 18]
print(map.isEmpty); // false 不為空
print(map.isNotEmpty); // true 不為空
}
3.3 常用方法
remove(key) 刪除指定key的數(shù)據(jù)
addAll({...}) 合并映射, 給映射增加屬性
containsValue(value) 判斷映射里是否有某個值, 返回true/ false
示例:
void main(){
// Map
// 1\. 創(chuàng)建Map
Map map = {
"name":"張三",
"age":18
};
print(map); // {name: 張三, age: 18}
// 2\. 常用方法
// 2.1 給集合添加內(nèi)容
map.addAll({
"sex":"男",
"like": ["游泳","下棋"]
});
print(map); // {name: 張三, age: 18, sex: 男, like: [游泳, 下棋]}
// 2.2 刪除指定的數(shù)據(jù)
map.remove("sex");
print(map); // {name: 張三, age: 18, like: [游泳, 下棋]}
// 2.3 判斷map里有沒有指定的內(nèi)容
print(map.containsValue("張三")); // true
print(map.containsValue("男")); // false
}
3.4 常用循環(huán)方法
- forEach
示例:
void main(){
// Map 循環(huán)
// 1\. 創(chuàng)建Map
Map map = {
"name":"張三",
"age": 18
};
print(map); // {name: 張三, age: 18}
// 2\. 循環(huán)方法
// 2.1 forEach 循環(huán)
// map.forEach((key,value){
// // 接受一個參數(shù),集合的值
// print("$key--$value");
// });
/*
name--張三
age--18
*/
}