Iterable and Collections
Inspect one language lane at a time so line-level text and code deltas stay readable.
Diff Lane
English
0 modified sections0 code block delta0 anchor delta
Diff Lane
中文
1 modified sections0 code block delta0 anchor delta
modifiedIterable 和 Collectionstextcode+2 lines, -1 line
v1.0.5
Section Text
1
前面已经了解过 Range、Array、ArrayList,它们都可以使用 for-in 进行遍历操作。对于开发者自定义的类型,也能实现类似的遍历操作。2
3
Range、Array、ArrayList 都是通过 Iterable 来支持 for-in 语法的。4
5
Iterable 是如下形式(只展示了核心代码)的一个内置 interface。6
7
8
iterator 函数要求返回的 Iterator 类型是如下形式(只展示了核心代码)的另一个内置 interface。9
10
11
可以使用 for-in 语法来遍历任何一个实现了 Iterable 接口类型的实例。12
13
假设有这样一段 for-in 代码,如下所示。14
15
<!-- run -->16
17
18
它等价于如下形式的 while 代码。19
20
<!-- run -->21
22
23
另外一种常见的遍历 Iterable 类型的方法是在 while 表达式的条件中使用模式匹配,比如上面 while 代码的另一种等价写法是:24
25
<!-- run -->26
27
28
Array、ArrayList、HashSet、HashMap 类型都实现了 Iterable,因此可以将其用在 for-in 或者 while 中。Code 1 · cangjie
1
interface Iterable<T> {2
func iterator(): Iterator<T>3
...4
}Code 2 · cangjie
1
interface Iterator<T> <: Iterable<T> {2
mut func next(): Option<T>3
...4
}Code 3 · cangjie
1
let list = [1, 2, 3]2
for (i in list) {3
println(i)4
}Code 4 · cangjie
1
let list = [1, 2, 3]2
var it = list.iterator()3
while (true) {4
match (it.next()) {5
case Some(i) => println(i)6
case None => break7
}8
}Code 5 · cangjie
1
let list = [1, 2, 3]2
var it = list.iterator()3
while (let Some(i) <- it.next()) {4
println(i)5
}v1.1.0
Section Text
1
前面已经了解过 Range、Array、ArrayList,它们都可以使用 for-in 进行遍历操作。对于开发者自定义的类型,也能实现类似的遍历操作。2
3
Range、Array、ArrayList 都是通过 Iterable 来支持 for-in 语法的。4
5
Iterable 是如下形式(只展示了核心代码)的一个内置 interface。6
7
<!-- code_no_check -->8
9
10
iterator 函数要求返回的 Iterator 类型是如下形式(只展示了核心代码)的一个内置 abstract class。11
12
<!-- code_no_check -->13
14
15
可以使用 for-in 语法来遍历任何一个实现了 Iterable 接口类型的实例。16
17
假设有这样一段 for-in 代码,如下所示。18
19
<!-- run -->20
21
22
它等价于如下形式的 while 代码。23
24
<!-- run -->25
26
27
另外一种常见的遍历 Iterable 类型的方法是在 while 表达式的条件中使用模式匹配,比如上面 while 代码的另一种等价写法是:28
29
<!-- run -->30
31
32
Array、ArrayList、HashSet、HashMap 类型都实现了 Iterable,因此可以将其用在 for-in 或者 while 中。Code 1 · cangjie
1
public interface Iterable<T> {2
func iterator(): Iterator<T>3
...4
}Code 2 · cangjie
1
public abstract class Iterator<T> <: Iterable<T> {2
public func next(): Option<T>3
...4
}Code 3 · cangjie
1
let list = [1, 2, 3]2
for (i in list) {3
println(i)4
}Code 4 · cangjie
1
let list = [1, 2, 3]2
var it = list.iterator()3
while (true) {4
match (it.next()) {5
case Some(i) => println(i)6
case None => break7
}8
}Code 5 · cangjie
1
let list = [1, 2, 3]2
var it = list.iterator()3
while (let Some(i) <- it.next()) {4
println(i)5
}