2010-06-21 15 views

उत्तर

47

वास्तव में नहीं, लेकिन अनुमान लगाएं, बस जावा का उपयोग करें! :)

<cfset foo = [1,2,3]> 
<cfset bar = [4,5,6]> 
<cfset foo.addAll(bar)> 

संदर्भ: Java's Collection Interface API

स्रोत: http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267

+2

विचित्र रूप से पर्याप्त, अंतर्निहित जावा विधियां हमेशा अपेक्षित रूप से काम नहीं करती हैं। मुझे अभी भी पता नहीं है कि कब और क्यों।मैं अक्सर डुप्लिकेट को हटाने, सरणी में शामिल होने और सॉर्ट करने के लिए जावा विधियों का उपयोग करता हूं, मुझे याद है कि कभी-कभी यह एरे बनाने के तरीके के आधार पर काम नहीं करता है, आप जावा विधि आदि को कॉल करने से पहले कौन से ऑपरेशन करते हैं। इसलिए ध्यान दें! –

+1

@ zarko.susnjar - मुझे पता है कि यह एक पुराना धागा है, लेकिन 'removeAll',' retainAll', आदि जैसे विधियों के साथ अप्रत्याशित परिणामों का कारण यह है कि जावा विधियां आपके सामान्य सीएफ फ़ंक्शन के रूप में उतनी ही कम नहीं हैं। वे आमतौर पर डेटा प्रकार संवेदनशील होते हैं। तो '" 2 "' (स्ट्रिंग) और 'वैल (2)' (संख्या) को विभिन्न मान/तत्व माना जाता है। जब तक कि आप पूरी तरह से निश्चित नहीं हैं कि दोनों सरणी मिलान में डेटा प्रकार हैं, तो आप अन्य विधियों IMO का उपयोग करने के बेहतर हैं। – Leigh

+2

बेशक, यदि आप किसी चीज़ के बारे में निश्चित नहीं हैं, तो हमेशा सुरक्षित और सिद्ध तरीके से जाएं। –

8

आप Railo का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं ArrayMerge (उदा <cfset NewArray=ArrayMerge(FirstArray,SecondArray)>)।

+2

मैंने एडोब के कोल्डफ्यूजन बग ट्रैकर में http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=83397 पर फीचर अनुरोध के रूप में जोड़ा है। इसे वोट दें! :) – Henry

+0

ArrayConcat बनाम। ArrayMerge बनाम ArrayAppend? कृपया यहां चर्चा करें: http://groups.google.com/group/cfml-conventional-wisdom/browse_thread/thread/95a4b511128c37ae – Henry

0

जावास्क्रिप्ट array.join (ओं) में डिलीमीटर द्वारा अलग सरणी के सभी तत्वों से एक स्ट्रिंग बनाता है। कोल्डफ्यूज़न में इसका एक समान कार्य ArrayToList फ़ंक्शन है। जहां तक ​​एक सरणी को दूसरे में जोड़ना मुझे विश्वास नहीं है कि इसके लिए एक सीएफ फ़ंक्शन है। सीएफ में ऐरे कार्यों की सूची देखने के लिए http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions-pt0_03.html#3473387 देखें। या फिर कुछ इस तरह का प्रयास करें:

 
<cfscript> 
    for(index = 1; index LTE ArrayLen(array2); i = i + 1) { 
     ArrayAppend(array1, array2[i]); 
    } 
</cfscript> 
+0

धन्यवाद, मेरा मतलब array.concat था। मैंने प्रश्न – Yisroel

6

इसके थोड़े गूंगा कैसे coldfusion कई बुनियादी कार्यों है कि एक एक पटकथा भाषा से उम्मीद होती है याद करते हैं। यहां एक है जिसे मुझे जल्दी लिखना पड़ा।

<cffunction name="mergeArrays" returntype="array" > 
    <cfargument name="array1" type="array" required="true" > 
    <cfargument name="array2" type="array" required="true" > 

    <cfset arrayResult = arrayNew(1) > 
    <cfloop array="#array1#" index="elem"> 
     <cfset arrayAppend(arrayResult,elem) > 
    </cfloop> 

    <cfloop array="#array2#" index="elem"> 
     <cfset arrayAppend(arrayResult,elem) > 
    </cfloop> 

    <cfreturn arrayResult> 
</cffunction> 
35

CF10 +, का उपयोग

arrayAppend(array1, array2, true); 

https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arrayappend.html

+2

कभी तय नहीं किया है। :) –

+9

+1, यह प्रभावशाली है कि आपको यह प्रश्न याद आया और इसे सुधारने के लिए दो साल बाद वापस आया। – John

1

सीएफ 10 या Railo 4, आप Underscore.cfc library की concat() फ़ंक्शन का उपयोग एक नई सरणी का एक संयोजन है कि प्राप्त करने के लिए कर सकते हैं दो अन्य सरणी (मौजूदा सरणी को संशोधित किए बिना)। उदाहरण cfscript:

newArray = _.concat([1], [2]); 

परिणाम:

// newArray == [1, 2] 

इस विधि का उपयोग एक नई सरणी प्राप्त करने के लिए एक सा एक नई सरणी बनाने और दो बार उस पर ArrayAppend बुला से क्लीनर है।

(अस्वीकरण: मैं Underscore.cfc लिखा था)

0

मैं बेन नाडेल से लिया और इसका इस्तेमाल किया एन्क्रिप्शन और हैशिंग प्रदर्शन करने के लिए। एक जादू की तरह काम किया!

<cfscript> 
    // Note: BinaryDecode/CharsetDecode return java arrays. 
    // Unlike CF arrays, java arrays are immutable, 
    // so the Java addAll(..) method to merge arrays won't work here. 
    // http://stackoverflow.com/a/10760835/104223 

    // function to merge immutable arrays the long way 
    function mergeArrays(array1, array2){ 
     var i = 0; 
     var newArray = []; 
     for (i = 1; i <= arrayLen(arguments.array1); i++) { 
      arrayAppend(newArray, arguments.array1[i]); 
     } 
     for (i = 1; i <= arrayLen(arguments.array2); i++) { 
      arrayAppend(newArray, arguments.array2[i]); 
     } 
     return newArray; 
    } 


    //convert the saltArray string and CustomerID string to UTF-8 byte arrays. 
    saltByteArray = charsetDecode(salt, "utf-8"); 
    CustomerIdByteArray = charsetDecode(CustomerId, "utf-8"); 

    //create a new byte array consisting of the CustomerId bytes 
    //appended with the salt bytes by merging the two binary arrays 
    //via custom function, mergeArrays 
    mergedBytes = mergeArrays(CustomerIdByteArray, saltByteArray); 
</cfscript> 
+0

असल में मुझे लगता है कि आप इसे मुझसे प्राप्त कर चुके हैं, हाहा .. और इस धागे को देखकर, * मुझे * शायद इसे @ नोज के उत्तर से मिला और इसे cfscript में दोबारा लिखा;) – Leigh

0

आप आसानी से इस तरह दो सूचियों को श्रेणीबद्ध कर सकते हैं:

<cfset combolist = ListAppend(lista,listb, ",")>

तो, पहले ArrayToList() का उपयोग करके सूचियां करने के लिए अपने दो सरणियों परिवर्तित। ListAppend() के साथ दो सूचियों को संयोजित करें और फिर उत्तर को वापस ListToArray() के साथ एक सरणी में परिवर्तित करें।

मुझे नहीं पता कि यह कितना कुशल है, लेकिन कोड बहुत आसान है। मुझे arrayAppend() का उपयोग करना अच्छा लगेगा, लेकिन मैं कोल्डफ्यूजन 8 में हूं।

+0

बस ध्यान रखें कि यह एक पूर्ण समतुल्य नहीं है ए) किसी रिक्त सरणी तत्वों को छोड़ें और बी) जो भी डेलीमीटर उपयोग किया जाता है, पर विभाजित सरणी मानों को विभाजित करें। यानी एकल मान 'एआर [1] = "डो, जॉन" 'बन जाएगा' एआर [1] = डो, एआर [2] = जॉन'। – Leigh

+0

लेघ, आप एक अच्छा मुद्दा बनाते हैं। यह एक अलग सूची डिलीमीटर का उपयोग करके चारों ओर काम किया जा सकता है, जैसे ~~~, या ~! ~! ~! जो सरणी के भीतर दिखाई नहीं देगा। –

+0

सच है, हालांकि इस मामले में कई वर्ण काम नहीं करेंगे। सीएफ के अधिकांश संस्करणों में, कई पात्रों को अलग-अलग डिलीमीटर के रूप में माना जाता है। यानी '~! 'का अर्थ है सीएफ मूल्यों को' ~ '** या **'! 'द्वारा सीमित के रूप में देखता है। (सीएफ 10 में चीजें बदल सकती हैं)। एसीआईआई 30, और [खाली सूची तत्वों को संरक्षित करना) जैसे एक चरित्र का उपयोग करना (http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_l_21.html), इसे बहुत करीब लेना चाहिए। – Leigh

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