## 第 9 节:数组 Array
##
## 演示 Array 的创建、增删查改、遍历。
数组用方括号创建,存放任意类型的元素。
var enemies: Array = ["slime", "Goblin", "orc"]
#索引访问(支持负数索引)
enemies [o] #"Slime" 这里的0表示数组数据中的第一个
enemies[-1] #“orc"(最后一个) ,-1在这里表示数组中倒数第一个数据
#问题:如果查询超出索引数据,会出现什么情况?
#增删
enemies.append ("Dragon") #末尾追加
enemies.insert(1,"wolf") #在指定位置1插入
enemies.erase("Slime") #按值删除
enemies.pop_back() #弹出最后一个,弹出即删除的意思
#这里使用方法的是数组名+"."+方法(或者叫系统给出的函数)来调用,来实现某个功能
#查询
enemies.size #数组长度,即多少个数据
Oenemies.has("Goblin") # true / false
enemies.find("Goblin") #索引,找不到返回-1
#has 和find都是查询,has只是简单判断有没有这个数据,find除了判断有没有,还要给出具体的索引位置
#遍历
for e in enemies:print(e)
重要坑:数组在GDScript中是按引用传递的。
func modify(arr):arr.append("x")
var a := [1,2, 3]modify(a)print(a)
#这会改到外面的原数组!
#[1,2,3,"x"]
要传副本得显式调用 .duplicate()。
extends Node
enum State{IDLE,RUN}
func _ready() -> void:
var enemies: Array = ["Slime", "Goblin", "Orc"]
var enemies2: Array = [1,2,3,4,5]
var enemies4: Array = [1,2,3,4,5,"sdfer"]
var enemies3: Array = [State.IDLE,2,3,4,5]
# 索引访问
print("第一个敌人:", enemies[0])
print("最后一个敌人:", enemies[-1]) # 支持负索引
# 长度
print("一共有 ", enemies.size(), " 个敌人")
# 增加
enemies.append("Dragon")
print("追加 Dragon 后:", enemies)
enemies.insert(1, "Wolf")
print("在位置 1 插入 Wolf:", enemies)
# 删除
enemies.erase("Slime")
print("删除 Slime 后:", enemies)
enemies.pop_back()
print("弹出最后一个后:", enemies)
# 查找
print("有 Goblin 吗:", enemies.has("Goblin"))
print("Goblin 的索引:", enemies.find("Goblin"))
# 遍历
print("--- 遍历 ---")
for e in enemies:
print("敌人:", e)
# 带索引遍历
print("--- 带索引遍历 ---")
for i in range(enemies.size()):
print(i, ":", enemies[i])
# 注意:数组是按引用传递的
demo_reference(enemies)
print("函数处理后的原数组:", enemies)
func demo_reference(arr: Array) -> void:
# 这里修改会影响外部的原数组!
arr.append("被函数加进来的")
