開發人員指南的第116頁說 「與cfloop標記不同,CFScript for-in循環不提供循環查詢和列表的內置支持。」循環遍歷cf9中的列表
問:如何在ColdFusion 9中使用新的腳本語法遍歷列表?
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
開發人員指南的第116頁說 「與cfloop標記不同,CFScript for-in循環不提供循環查詢和列表的內置支持。」循環遍歷cf9中的列表
問:如何在ColdFusion 9中使用新的腳本語法遍歷列表?
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
您也可以嘗試listToArray,然後使用for-in結構的陣列中CF9爲:
<cfscript>
aCol = listToArray (qry.ColumnList);
for(fieldName in aCol){
form[fieldName] = qry[fieldName][1];
}
</cfscript>
請注意,這隻適用於Update 1。原來的CF9會給出一個錯誤,因爲只允許在struct中使用for-in。 – DaveBurns 2011-04-21 18:12:18
這個例子中是否需要中間變量'aCol'?對於(ListToArray(qry.ColumnList)中的fieldName)''是否更清潔(少範圍污染)? – 2013-09-02 21:38:12
它會創建額外的數組變量,這涉及額外的內存分配? 這是否意味着cfloop標籤比在cfscript中做這樣的東西更有效率? 我在問這個,因爲我想說服團隊使用cfscript,但他們給這個觀點是一個缺點。 – wyxa 2015-09-29 15:00:43
<cfscript>
var i = 0;
var l = ListLen(qry.Columnlist);
var FieldName = "";
for (i = 1; i lte l; i = i + 1) // you also can use i++ instead
{
FieldName = ListGetAt(qry.Columnlist, i);
form[FieldName] = qry[FieldName][1];
}
</cfscript>
編輯一些好的以上的(也許甚至快一點,對於較重循環)版本:
<cfscript>
var i = 0;
var Fields = ListToArray(qry.Columnlist);
var FieldName = "";
var l = arrayLen(Fields);
for (i = 1; i lte l; i = i + 1) // you also can use i++ instead
{
FieldName = Fields[i];
form[FieldName] = qry[FieldName][1];
}
</cfscript>
我會變成列表到一個數組第一。 ListGetAt()
在循環中被調用n次效率不高。然而,ArrayLen()
應該相當快。
<cfscript>
arr = ListToArray(qry.Columnlist);
for (i = 1; i <= ArrayLen(arr); i++)
{
fieldName = arr[i];
form[FieldName] = qry[FieldName][1];
}
</cfscript>
調用ArrayLen一次並將其存儲在一個變量中是否會更快? – 2011-04-18 16:17:06
是的,它會。只是想保持代碼段小而整齊 – Henry 2011-04-18 18:04:56
這是有道理的......它比'arr [i]'更容易使用'fieldName'進行讀取。 – 2011-04-18 18:07:21
亞當卡梅倫已經把一個夢幻般的資源在https://github.com/ daccfml/cfscript/blob/master/cfscript.md – 2014-11-06 17:46:43