基础语法:区间、列表与映射
三、区间、列表与映射#
1. 区间#
区间表达式 区间使用
..<(左闭右开) 或..(为闭区间),左右不能有空格。 支持变量扩展。10..<10 #不包含10 20..10 #包含10 3a..b区间表达式支持步进:
:step10..6:2 # 表示步进为2: [0,2,4,6]可用于循环、包含检测、数组创建等。
1let r = 0..8 2 3for i in r {...} # 比直接在数组上循环效率更高 4r ~: 5 # 检测是否包含元素 5List.from(r) # 转为数组
2. 列表(数组)#
列表用
[ ]表示。内部元素是有序的。也可以用
...或...<直接从区间创建10...5 # 输出[0,1,2,3,4] 2# 等同于 3List.from(0..5)
两个点.. ..<创建区间,三个点... ...<创建数组
索引用
.或[i]表示。1let arr = [10, "a", True]索引和切片
1# 基础索引 2 3arr.1 4arr[0] # → 10 5 6# 切片操作 7arr[1:3] # → ["a", True](左闭右开) 8arr[::2] # → [10, True](步长2) 9arr[-1:] # → True(切片支持负数索引)复杂嵌套
1# 复杂嵌套 2[1,24,5,[5,6,8]][3][1] # 显示6 3# # 修改元素 4# arr[2] = 3.14 # → [10, "a", 3.14]高级操作 参考 list 模块。
边缘情况:
- 数组索引如果超出边界,会触发
out of bounds错误 - 数组切片支持负数,表示从后往前数的index
- 如果对不能索引的对象进行索引,会触发如下错误:
[ERROR] type error: expected indexable type (list/dict/string), found symbol
3. 映射(字典)#
映射用
{}表示1let mydict = {name: "Alice", age: 30} 2 3# 允许简写: 4let a = b =3, 5{a, b} 6{ 7 a, 8 b, 9} # 允许末尾逗号,允许多行书写 10{a, } # 单个键值的逗号不能省略字典索引
1# 基础访问 2 3mydict["name"] # → "Alice" 4mydict.name # → "Alice"(简写形式) 5mydict@name # → "Alice"(简写形式) 6 7# 动态键支持 8let key = "ag" + "e" 9dict[key] # → 30 10 11# 嵌套访问 12let data = {user: mydict} 13data.user.age # → 100高级操作 参考 map 模块。
边缘情况:
| 场景 | 行为 |
|---|---|
| 访问不存在的数组索引 | 触发[ERROR] key x not found in map错误 |
| 对非字典对象进行索引 | 触发 [ERROR] not valid index option 错误 |
| 对未定义的符号进行索引 | 返回字符串,因为shell中操作文件名是最常见的操作 |