第 4 章:集合类型
list / tuple / dict / set —— 日常数据搬运的核心。
01list 可变序列
Python
xs = [1, 2, 3]
xs.append(4)
xs[0] = 10
print(len(xs), xs[-1])
Kotlin
val xs = mutableListOf(1, 2, 3)
xs.add(4)
xs[0] = 10
println("${xs.size} ${xs.last()}")
ArkTS
const xs: number[] = [1, 2, 3];
xs.push(4);
xs[0] = 10;
console.info(`${xs.length} ${xs[xs.length - 1]}`);
02tuple 不可变序列
像「固定字段的轻量记录」;可拆包。
Python
point = (10, 20)
x, y = point
# point[0] = 1 # TypeError
Kotlin
val point = 10 to 20 // Pair
val (x, y) = point
// data class 更常见
ArkTS
const point: [number, number] = [10, 20];
const [x, y] = point;
函数多返回值本质是返回 tuple:
return a, b。03dict 键值映射
Python
user = {"id": 1, "name": "Ada"}
user["name"] = "Bob"
print(user.get("email", "n/a"))
for k, v in user.items():
print(k, v)
Kotlin
val user = mutableMapOf("id" to 1, "name" to "Ada")
user["name"] = "Bob"
println(user["email"] ?: "n/a")
for ((k, v) in user) {
println("$k $v")
}
ArkTS
const user: Record<string, string | number> = { id: 1, name: "Ada" };
user["name"] = "Bob";
console.info(user["email"] ?? "n/a");
for (const k of Object.keys(user)) {
console.info(k, user[k]);
}
04set 去重集合
Python
s = {1, 2, 2, 3} # {1, 2, 3}
s.add(4)
print(2 in s)
Kotlin
val s = mutableSetOf(1, 2, 2, 3)
s.add(4)
println(2 in s)
ArkTS
const s = new Set<number>([1, 2, 2, 3]);
s.add(4);
console.info(s.has(2));
空 set 必须写
set(),{} 是空 dict。05切片
Python
a = [0, 1, 2, 3, 4]
print(a[1:4]) # [1, 2, 3]
print(a[::-1]) # 反转
Kotlin
val a = listOf(0, 1, 2, 3, 4)
println(a.subList(1, 4))
println(a.asReversed())
ArkTS
const a = [0, 1, 2, 3, 4];
console.info(a.slice(1, 4));
console.info([...a].reverse());