ColdFusion结构中的数组键

时间:2010-07-19 14:54:52

标签: arrays data-structures coldfusion

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

为了更清楚地了解我正在尝试做什么,这就是我的想法:

StructInsert(account[i], "child[numChildren]", z);

其中“child”应该是一个数组,numChildren是一个循环中的计数器。

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

3 个答案:

答案 0 :(得分:8)

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

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

让我们考虑一个结构,子进行数组。

<cfset Account = structNew() />
<cfset Account.Child = ArrayNew(1) />

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

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

<cfset z = structNew() />
<cfset z.id = 1 />
<cfset z.name = "James" />

你可以像这样添加到Account.Child:

<cfset ArrayAppend(account.child,z) />

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

<cfset account.child[numChildren] = z />

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

<cfset Account["child_#numChildren#"] = z />

仅供参考,structInsert通常是一个不必要的函数。

答案 1 :(得分:1)

如果您想要变量,请删除引号,否则键是该字符串。


虽然很难确定你想说的是:

Account[i][ child[numChildren] ] = z

VS

Account[i]['child'][numChildren] = z

或其他。


<强>更新

好的,基于你的评论,你可能想要这个:

Account.Child[numChildren] = z;

这将在numChildren作为索引的循环中,在以下语句之后的某个地方:

Account = StructNew();
Account.Child = ArrayNew(1);

(您也可以使用Account['Child']代替Account.Child表示法。)

答案 2 :(得分:1)

我并不完全清楚你想要做什么 - 但是如果你想在结构中创建一个子元素,这是你要做的:

var s = StructNew();
StructInsert(a, "ArrayName", ArrayNew(1))
a.ArrayName[10] = "Value for index 10";

StructInsert采用以下参数:(struct,key,value)。有关详细信息,请参阅此Adobe文档:http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f02.html