Unire due matrici in ColdFusion
-
28-09-2019 - |
Domanda
C'è un built-in modo per unire due matrici in ColdFusion, simili a array.concat()
di JavaScript?
Soluzione
Non proprio, ma indovinate un po ', basta usare Java! :)
<cfset foo = [1,2,3]>
<cfset bar = [4,5,6]>
<cfset foo.addAll( bar )>
di riferimento: Java Collection Interface API .
fonte: http: //www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267
Altri suggerimenti
CF10 +, l'uso
arrayAppend(array1, array2, true);
Se stai usando Railo , è possibile utilizzare ArrayMerge (Eg <cfset NewArray=ArrayMerge(FirstArray,SecondArray)>
).
Il suo genere di muto come ColdFusion manca molte funzioni di base che ci si aspetta da un linguaggio di scripting. Ecco quello che ho dovuto scrivere rapidamente.
<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>
In CF 10 o Railo 4, è possibile utilizzare la funzione concat () del href="http://russplaysguitar.github.com/UnderscoreCF/#concat" rel="nofollow"> biblioteca per ottenere un nuovo array che è una concatenazione di altri due array (senza modificare gli array esistenti). Esempio cfscript:
newArray = _.concat([1], [2]);
Risultato:
// newArray == [1, 2]
Utilizzando questo metodo per ottenere un nuovo array è un po 'più pulito rispetto alla creazione di un nuovo array e chiamando ArrayAppend su due volte.
(Disclaimer: ho scritto Underscore.cfc)
In Array.join JavaScript (s) crea una stringa di tutti gli elementi della matrice separati dal delimitatore s. Una funzione simile a questo in ColdFusion è la funzione ArrayToList. Per quanto aggiungendo un array ad un altro non che ci sia una funzione CF per questo. Controllare http: //livedocs.adobe .com / coldfusion / 8 / htmldocs / help.html? content = funzioni-pt0_03.html # 3.473.387 per vedere l'elenco delle funzioni di matrice in CF. O provare qualcosa di simile:
<cfscript> for(index = 1; index LTE ArrayLen(array2); i = i + 1) { ArrayAppend(array1, array2[i]); } </cfscript>
Si può facilmente concatenare due liste come questa:
<cfset combolist = ListAppend(lista,listb, ",")>
Quindi, prima convertire i due array di liste usando ArrayToList()
. Unire le due liste con il ListAppend () e poi convertire la schiena risposta a un array con ListToArray()
.
Non so quanto sia efficiente questo è, ma il codice è molto semplice. Mi piacerebbe utilizzare l'arrayAppend (), ma io sono in ColdFusion 8.
Ho preso questa da Ben Nadel e lo ha utilizzato per eseguire la crittografia e hashing. Ha lavorato come un fascino!
<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>