|
Maps复合类型 map<K, V> 用于将 K 类型的键与 V 类型的相应值关联起来例如,map<Int, Int> 使用 Int 类型作为其键和值:9 d. `, X) v3 ]1 A. ~' r8 p& k
- struct IntToInt {1 U( K' b# R3 |8 P* \# f6 d
- counters: map<Int, Int>;
( Y/ [" v q# x. Z' C* Z4 Q- l+ Q - }
复制代码
( p! v4 n( \. v' l7 E) J
) \: R0 ]1 K6 R# ]) O( _" ^8 }+ w7 y" M8 _9 w3 i
操作
$ j, J' L6 x6 o- m6 w, J8 [* H NDeclare, emptyMap()
5 z$ F& \+ f0 O) u0 S% ]4 C作为局部变量,使用标准库的 emptyMap() 函数:
# ^! ?; o$ j* l+ N+ O0 c8 j+ V% j# ?- let fizz: map<Int, Int> = emptyMap();. n. h0 y9 u; i( W& q5 y
- let fizz: map<Int, Int> = null; // identical to the previous line, but less descriptive
复制代码 作为 持久状态变量:5 j! S3 m1 y* `2 X# f1 B, O
- contract Example {
) l, b8 x8 }; a9 E" u v2 H' e5 w - fizz: map<Int, Int>; // Int keys to Int values
& C9 X8 w2 v, ^2 c9 a; n - init() {3 o* v+ r# K) ? R
- self.fizz = emptyMap(); // redundant and can be removed!
. H1 K) {" ^" e2 B; V - }3 D& B/ s9 @+ h5 A
- }
复制代码 请注意,类型为 map<K, V> 的 持久状态变量 默认为空,不需要默认值,也不需要在 init() 函数中进行初始化。2 P. ~* c; h; H# _# L$ u
/ b0 t4 @, e6 `+ F
, w+ U; [% }# R4 D; ~! K |7 G) |: Z8 C, R* G. o
设置值,.set()( N; p/ o5 b) \* k
要设置或替换键下的值,请调用 .set() 方法,所有 map 都可以使用该方法。
1 e/ c& x+ i- b8 c+ @- U* N- // Empty map2 o% K' \+ D u% r
- let fizz: map<Int, Int> = emptyMap();1 Z6 Y9 h$ o& d: C" ?+ S: `8 S* F- g; u
' j( R1 ?% T0 M- // Setting a couple of values under different keys
) {6 ^- z. F* `6 G# ` y - fizz.set(7, 7);
7 P: d, H4 Q. A0 w8 g - fizz.set(42, 42);# R5 i6 Q5 j4 Z* m9 o% J% Y6 i
- & c) h$ x+ b4 w- R' h. X
- // Overriding one of the existing key-value pairs
4 ?6 p1 o7 [7 x( @& O$ | - fizz.set(7, 68); // key 7 now points to value 68
复制代码- // Empty map( @0 ^5 E' G, A2 v: R$ M
- let fizz: map<Int, Int> = emptyMap();" W4 z; E% b; t
- , C; m! M* O3 g4 v
- // Setting a value7 T2 G" E; T5 |! `4 E7 ]
- fizz.set(68, 0);
! ]7 v( h% [. k - ) q) R2 j0 ], O6 y+ f( K. }+ I w# ?
- // Getting the value by its key H3 I. U; d/ ~+ s
- let gotButUnsure: Int? = fizz.get(68); // returns Int or null, therefore the type is Int?
; J$ O& u: N' U! W& h - let mustHaveGotOrErrored: Int = fizz.get(68)!!; // explicitly asserting that the value must not be null,2 Z( E6 w3 C$ E# _8 W, @
- // which may crush at runtime if the value is, in fact, null/ b }+ r1 N# p. w8 w% k; q- U
- 7 W0 K, \9 A. P$ t/ u5 A; X
- // Alternatively, we can check for the key in the if statement
) r R3 Y. x& `4 f - if (gotButUnsure != null) {
8 L: u$ i8 h5 s, R - // Hooray, let's use !! without fear now and cast Int? to Int m+ `1 A0 p% E& ~3 V7 f K7 a3 Y! d8 P
- let definitelyGotIt: Int = fizz.get(68)!!;+ u0 S( e* S6 i# {
- } else {7 ?: c& A8 t8 p8 S( t) X2 U# ~
- // Do something else...
! X( O+ _, v1 z' M5 x - }
复制代码 # i2 k1 k9 `. _# m! C4 d
P8 z$ m$ [! X9 h0 b' M9 o* b9 L! G: c
# `: h2 t, S- G, I: Q( z8 q0 Y( s v" i2 D' r; m/ Z
|
|