Unir dos matrices en ColdFusion
-
28-09-2019 - |
Pregunta
¿Hay un sistema incorporado en forma de unir dos matrices en ColdFusion, similar a array.concat()
de JavaScript?
Solución
En realidad no, pero supongo que lo que, sólo tiene que utilizar Java! :)
<cfset foo = [1,2,3]>
<cfset bar = [4,5,6]>
<cfset foo.addAll( bar )>
referencia: Colección de interfaz Java API .
Fuente: http: //www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267
Otros consejos
CF10 +, el uso
arrayAppend(array1, array2, true);
Si está utilizando Railo , puede utilizar ArrayMerge (Ej <cfset NewArray=ArrayMerge(FirstArray,SecondArray)>
).
Es un poco tonto cómo ColdFusion pierde muchas de las funciones básicas que uno esperaría de un lenguaje de script. Aquí hay una que tenía que escribir rápidamente.
<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>
En la FQ 10 o Railo 4, puede utilizar la función concat () de la biblioteca href="http://russplaysguitar.github.com/UnderscoreCF/#concat" rel="nofollow"> para obtener una nueva matriz que es una concatenación de otros dos matrices (sin modificar las matrices existentes). Ejemplo cfscript:
newArray = _.concat([1], [2]);
Resultados:
// newArray == [1, 2]
El uso de este método para obtener una nueva matriz es un poco más limpia que la creación de una nueva matriz y llamando ArrayAppend en él dos veces.
(Negación: escribió Underscore.cfc)
En Array.join javascript (s) crea una cadena de todos los elementos de la matriz separados por el delimitador s. Una función similar a esta en ColdFusion es la función ArrayToList. En lo que añadiendo una matriz a otra no creo que hay una función CF para eso. Compruebe http: //livedocs.adobe .com / ColdFusion / 8 / htmldocs / help.html? content = funciones pt0_03.html # 3473387 para ver la lista de funciones de matriz en la FQ O intentar algo como esto:
<cfscript> for(index = 1; index LTE ArrayLen(array2); i = i + 1) { ArrayAppend(array1, array2[i]); } </cfscript>
Usted puede fácilmente concatenar dos listas como esta:
<cfset combolist = ListAppend(lista,listb, ",")>
Así que, primero convertir sus órdenes de dos de las listas utilizando ArrayToList()
. Combinar las dos listas con el ListAppend () y luego convertir la parte posterior respuesta a una matriz con ListToArray()
.
No sé qué tan eficiente es esto, pero el código es muy simple. Me gustaría utilizar el arrayAppend () pero estoy en ColdFusion 8.
Tomé esto desde Ben Nadel y lo utilizó para realizar el cifrado y hash. Trabajado como un encanto!
<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>