通常來說, Map 是用來關(guān)聯(lián) keys 和 values 的對象。 keys 和 values 可以是任何類型的對象。在一個 Map 對象中一個 key 只能出現(xiàn)一次。 但是 value 可以出現(xiàn)多次。 Dart 中 Map 通過 Map 字面量 和 Map 類型來實現(xiàn)。
下面是使用 Map 字面量的兩個簡單例子:
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
提示: Dart 會將 gifts
的類型推斷為 Map<String, String>
, nobleGases
的類型推斷為 Map<int, String>
。 如果嘗試在上面的 map 中添加錯誤類型,那么分析器或者運行時會引發(fā)錯誤。 有關(guān)更多信息,請閱讀類型推斷。。
以上 Map 對象也可以使用 Map 構(gòu)造函數(shù)創(chuàng)建:
var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
提示: 這里為什么只有 Map()
,而不是使用 new Map()
。 因為在 Dart 2 中,new
關(guān)鍵字是可選的。 有關(guān)更多信息,參考 構(gòu)造函數(shù)的使用。
類似 JavaScript ,添加 key-value 對到已有的 Map 中:
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair
類似 JavaScript ,從一個 Map 中獲取一個 value:
var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');
如果 Map 中不包含所要查找的 key,那么 Map 返回 null:
var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);
使用 .length 函數(shù)獲取當前 Map 中的 key-value 對數(shù)量:
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);
創(chuàng)建 Map 類型運行時常量,要在 Map 字面量前加上關(guān)鍵字 const。
final constantMap = const {
2: 'helium',
10: 'neon',
18: 'argon',
};
// constantMap[2] = 'Helium'; // 取消注釋會引起錯誤。
更名多關(guān)于 Map 的內(nèi)容,參考 Generics and Maps.
在 Dart 中, Rune 用來表示字符串中的 UTF-32 編碼字符。
Unicode 定義了一個全球的書寫系統(tǒng)編碼, 系統(tǒng)中使用的所有字母,數(shù)字和符號都對應(yīng)唯一的數(shù)值編碼。 由于 Dart 字符串是一系列 UTF-16 編碼單元, 因此要在字符串中表示32位 Unicode 值需要特殊語法支持。
表示 Unicode 編碼的常用方法是, \uXXXX, 這里 XXXX 是一個4位的16進制數(shù)。 例如,心形符號 (?) 是 \u2665。 對于特殊的非 4 個數(shù)值的情況, 把編碼值放到大括號中即可。 例如,emoji 的笑臉 (?) 是 \u{1f600}。
String 類有一些屬性可以獲得 rune 數(shù)據(jù)。 屬性 codeUnitAt 和 codeUnit 返回16位編碼數(shù)據(jù)。 屬性 runes 獲取字符串中的 Rune 。
下面是示例演示了 Rune 、 16-bit code units、 和 32-bit code points 之間的關(guān)系。
main() {
var clapping = '\u{1f44f}';
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());
Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));
}
一個 Symbol 對象表示 Dart 程序中聲明的運算符或者標識符。 你也許永遠都不需要使用 Symbol ,但要按名稱引用標識符的 API 時, Symbol 就非常有用了。 因為代碼壓縮后會改變標識符的名稱,但不會改變標識符的符號。 通過字面量 Symbol ,也就是標識符前面添加一個 # 號,來獲取標識符的 Symbol 。
#radix
#bar
Symbol 字面量是編譯時常量。
更多建議: