ColdFusion结构中的数组键

Jim*_*mmy 2 arrays coldfusion data-structures

在ColdFusion结构(数组)中创建密钥的正确语法是什么?最好是在cfscript标签中.

为了更清楚地了解我想要做什么,这就是我认为的可能:

StructInsert(account[i], "child[numChildren]", z);
Run Code Online (Sandbox Code Playgroud)

其中"child"应该是一个数组,numChildren是一个循环中的计数器.

显然这不起作用.它只是给我一个错误,说关键字"child [numChildren]"已经存在.

Mar*_*ark 8

你说"帐户"结构称为"子",这是一个数组.这没有任何意义.如果"child"是一个数组,则它不能是一个结构.如果它是一个结构,它不能是一个数组.数组可以包含结构,结构可以包含数组.

struct是一个map或hash,换句话说,它由名称值对组成.数组是值的集合或列表.您可以循环它们,或通过它们的数字索引访问它们.

让我们考虑一个结构,子代数.

<cfset Account = structNew() />
<cfset Account.Child = ArrayNew(1) />
Run Code Online (Sandbox Code Playgroud)

Account是一个结构,因此您可以在其上使用struct函数(structKeyExists,structInsert).
Account.Child是一个数组,因此您可以在其上使用数组函数(arrayAppend等).作为数组的Account.Child可以包含条目中的几乎任何值,包括复杂值.所以让我们让Account.Child成为一个结构数组.

假设你的例子中的z是一个看起来像这样的结构:

<cfset z = structNew() />
<cfset z.id = 1 />
<cfset z.name = "James" />
Run Code Online (Sandbox Code Playgroud)

您可以将此添加到Account.Child,如下所示:

<cfset ArrayAppend(account.child,z) />
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过索引直接执行此操作:

<cfset account.child[numChildren] = z />
Run Code Online (Sandbox Code Playgroud)

现在.假设您希望将Account保留为结构,但是您希望结构中的每个子项都有1个键,而不是使用数组.您可以使用动态密钥执行此操作,如下所示:

<cfset Account["child_#numChildren#"] = z />
Run Code Online (Sandbox Code Playgroud)

仅供参考,structInsert通常是一个不必要的功能.