gpt4 book ai didi

sqf - 如何在 SQF 中模拟哈希表?

转载 作者:行者123 更新时间:2023-12-01 13:36:11 24 4
gpt4 key购买 nike

仅供引用:SQF is a programming language用于电脑游戏系列 Arma。

SQF的主要数据类型are documented并且该列表不包括哈希表(或字典)。

拥有哈希表的一种方法是在 mission.sqm 中创建一个游戏逻辑。 (例如命名 logic1 ),并使用 setVariablegetVariable在它上面,例如

logic1 setVariable ["variable1", 1];
_a = logic1 getVariable "variable1";

但是,这需要一个与之关联的额外数组来跟踪使用过的 key 列表,例如
logic1Vars = [];
logic1 setVariable ["variable1", 1];
logic1Vars pushBack "variable1";

logic1 setVariable ["variable1", nil];
logic1Vars = logic1Vars - ["variable1"];

(或者有没有办法获取变量列表?)

另一种方法(这是可能的,但我没有尝试过)是实现一个哈希表。这显然需要额外的努力,因为实现一张好的表并不容易。

但也许我遗漏了一些东西:是否有一种惯用的方法可以在 SQF 中使用哈希表?

最佳答案

您可以使用 allVariables检索命名空间中的键数。

要创建命名空间,您可以使用逻辑或位置或 SimpleObject。看看CBA是怎么做的https://github.com/CBATeam/CBA_A3/blob/master/addons/common/fnc_createNamespace.sqf .

通常,Location 或 SimpleObject 比使用 GameLogic 对性能更友好。你应该记住这一点。

但是您可能正在搜索的是 allVariables 命令,它返回命名空间(哈希表)中的所有变量。

您也可以使用 getVariable ARRAY 设置默认值,以防命名空间不包含您要读取的 key 。

CBA还有 Hashes 他们的行为就像一张 map 。不像 hashTable(键没有散列),它也是 SQF 代码而不是引擎代码,所以它稍微慢一些。

另外(没有足够的声誉发表评论)
您不需要所有这些:

_vars = _logic getVariable "_VARIABLES";
_vars pushBack "variable1";
_logic setVariable ["_VARIABLES", _vars];

_vars 将是对 Array 的引用,而 pushBack 将向您所引用的该 Array 添加一个元素。所以 pushBack 已经在修改 _VARIABLES .无需再次设置。

关于sqf - 如何在 SQF 中模拟哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43189323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com