2010-01-07 8 views
11

पृष्ठ 116 में सूचियों पर लूपिंग "सीएफएलओओपी टैग के विपरीत, सीएफएसस्क्रिप्ट फॉर-इन लूप क्वेरी और सूचियों पर लूपिंग के लिए अंतर्निहित समर्थन प्रदान नहीं करता है।"डेवलपर की मार्गदर्शिका के सीएफ 9

प्रश्न: मैं कोल्डफ्यूजन 9 में नए स्क्रिप्ट सिंटैक्स का उपयोग करके सूची में लूप कैसे करूं?

<cfloop list="#qry.Columnlist#" index="FieldName"> 
    <cfset form[FieldName] = qry[FieldName][1]> 
</cfloop> 
+1

एडम कैमरून https://github.com/ में एक साथ एक शानदार संसाधन डाल दिया daccfml/cfscript/blob/master/cfscript.md –

उत्तर

19

तुम भी listToArray कोशिश कर सकते हैं और उसके बाद के रूप में CF9 में सरणी के लिए के लिए में निर्माण का उपयोग करें:

<cfscript> 
aCol = listToArray (qry.ColumnList); 

for(fieldName in aCol){ 
    form[fieldName] = qry[fieldName][1]; 
} 

</cfscript> 
+5

ध्यान दें कि यह काम करता है लेकिन केवल अद्यतन 1 स्थापित के साथ। मूल सीएफ 9 एक त्रुटि देगा क्योंकि फॉर-इन को केवल संरचनाओं पर ही अनुमति दी गई थी। – DaveBurns

+0

क्या इस उदाहरण में मध्यवर्ती चर 'aCol' आवश्यक है? के लिए नहीं होगा (ListToArray में फ़ील्डनाम (qry.ColumnList)) 'क्लीनर (कम स्कोप प्रदूषण) हो? –

+0

क्या यह अतिरिक्त सरणी चर बना देगा, जो अतिरिक्त स्मृति आवंटन को दर्शाता है? क्या इसका मतलब यह है कि cfsoop टैग cfscript में ऐसी सामग्री करने से अधिक कुशल है? मैं यह पूछ रहा हूं क्योंकि मैं टीम को cfscript का उपयोग करने के लिए राजी करना चाहता हूं, लेकिन वे इस बिंदु को नुकसान के रूप में दे रहे हैं। – wyxa

12
<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> 
+0

थोड़ा छोटा रूप: (i = 1; i <= qry.RecordCount; i ++) {} – Sergii

+1

@ सर्गी: यह पूरा बिंदु है - यह 'रिकॉर्डकाउंट' के बारे में नहीं है, लेकिन 'कॉलमलिस्ट' की लंबाई के बारे में। ;-) – Tomalak

+0

ओह, आप सही हैं। क्षमा करें :) – Sergii

5

मैं एक सरणी में सूची चालू करेंगे पहले। ListGetAt() लूप में एन बार कहा जाने वाला कुशल नहीं है। ArrayLen() हालांकि काफी तेज़ होना चाहिए।

<cfscript> 
arr = ListToArray(qry.Columnlist); 

for (i = 1; i <= ArrayLen(arr); i++) 
{ 
    fieldName = arr[i]; 
    form[FieldName] = qry[FieldName][1]; 
} 
</cfscript> 
+0

क्या यह सिर्फ एक बार ArrayLen को कॉल करने और इसे एक चर में स्टोर करने के लिए तेज़ नहीं होगा? –

+0

हाँ यह होगा। बस कोड सेगमेंट को छोटे और साफ – Henry

+0

रखना चाहते हैं जो समझ में आता है ... और यह 'arr [i]' से 'fieldName' का उपयोग करके अधिक पठनीय है। –

संबंधित मुद्दे