1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 15:01:53 +08:00
Files
Dog-Lynx-And-HCN/scripts/Tools/ArrayTool.gd
T
fallingshrimp ebe9faa46c feat(保存系统): 改进保存数据的序列化和反序列化处理
重构保存系统以使用新的嵌套字典工具方法
修改Starter场景中的按钮文本并隐藏多人游戏选项
添加JsonTool和ArrayTool的嵌套数据操作方法
2026-05-10 06:43:08 +08:00

87 lines
2.2 KiB
GDScript

class_name ArrayTool
static func removeAll(array: Array, value) -> Array:
var result = []
for item in array:
if item != value:
result.append(item)
return result
static func swap(array: Array, a: int, b: int):
var temp = array[a]
array[a] = array[b]
array[b] = temp
return array
static func parseEncodedObject(arr: Array) -> Array:
var result = []
for item in arr:
if item is EncodedObjectAsID:
result.append(instance_from_id(item.get_instance_id()))
else:
result.append(item)
return result
static func betterMap(arr: Array, executor: Callable) -> Array:
var result = []
for index in len(arr):
result.append(executor.call(arr[index], index, arr))
return result
static func fill(origin: Dictionary, filler: Callable) -> Dictionary:
return origin.keys().reduce(
func(accum, key):
accum[key] = filler.call(key)
return accum,
{}
)
static func mapEntries(origin: Dictionary, mapper: Callable) -> Dictionary:
return origin.keys().reduce(
func(accum, key):
var entry = mapper.call(key, origin[key])
accum[entry[0]] = entry[1]
return accum,
{}
)
static func dictionaryFromEntries(keys: Array, values: Array) -> Dictionary:
var result = {}
for index in len(keys):
var key = keys[index]
var value = values[index]
result[key] = value
return result
static func mergeDictionary(a: Dictionary, b: Dictionary) -> Dictionary:
var result := {}
for key in a:
result[key] = a[key]
for key in b:
result[key] = result.get(key, 0.0) + b[key]
return result
static func getNested(data: Variant, path: String) -> Variant:
var keys = path.split(".")
var result = data
for key in keys:
if result is Dictionary:
result = result[key]
elif result is Array:
result = result[key.to_int()]
else:
return null
return result
static func setNested(data: Variant, path: String, value: Variant):
var keys = path.split(".")
for i in range(keys.size() - 1):
var key = keys[i]
if data is Dictionary:
data = data[key]
elif data is Array:
data = data[key.to_int()]
else:
return
var lastKey = keys[-1]
if data is Dictionary:
data[lastKey] = value
elif data is Array:
var index = lastKey.to_int()
if index == data.size():
data.append(value)
else:
data[index] = value
return data