Gibt es eine integrierte Möglichkeit, zwei Arrays in ColdFusion zu verbinden, ähnlich wie JavaScript array.concat()
?Verbinden von zwei Arrays in ColdFusion
Antwort
Nicht wirklich, aber raten Sie mal, verwenden Sie einfach Java! :)
<cfset foo = [1,2,3]>
<cfset bar = [4,5,6]>
<cfset foo.addAll(bar)>
Referenz: Java's Collection Interface API.
Quelle: http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267
Wenn Sie Railo verwenden, können Sie ArrayMerge (z <cfset NewArray=ArrayMerge(FirstArray,SecondArray)>
) verwenden.
Ich habe den ColdFusion Bug Tracker von Adobe als Feature-Anfrage unter http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=83397 hinzugefügt. Stimme es ab! :) – Henry
ArrayConcat Vs. ArrayMerge Vs ArrayAppend? Bitte diskutieren Sie hier: http://groups.google.com/group/cfml-conventional-wisdom/browse_thread/thread/95a4b511128c37ae – Henry
In Javascript erstellt array.join (s) eine Zeichenfolge aus allen Elementen des Arrays, die durch das Trennzeichen getrennt sind. Eine ähnliche Funktion in ColdFusion ist die ArrayToList-Funktion. Was das Anhängen eines Arrays an ein anderes betrifft, glaube ich nicht, dass es eine CF-Funktion dafür gibt. Überprüfen Sie http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions-pt0_03.html#3473387, um die Liste der Array-Funktionen in CF anzuzeigen. Oder versuchen, etwas wie folgt aus:
<cfscript> for(index = 1; index LTE ArrayLen(array2); i = i + 1) { ArrayAppend(array1, array2[i]); } </cfscript>
danke, ich meinte array.concat. Ich habe die Frage – Yisroel
Sein irgendwie dumm, wie Coldfusion viele grundlegende Funktionen vermisst, die man von einer Skriptsprache erwartet. Hier ist eine, die ich schnell schreiben musste.
<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>
CF10 + verwenden
arrayAppend(array1, array2, true);
besser spät als nie behoben. :) –
+1, Es ist beeindruckend, dass Sie diese Frage in Erinnerung und kam zwei Jahre später zurück, um es zu verbessern. – John
In CF 10 oder Railo 4, können Sie die concat() Funktion der Underscore.cfc library verwenden, um ein neues Array zu erhalten, die eine Verkettung ist von zwei andere Arrays (ohne die bestehenden Arrays zu modifizieren). Beispiel cfscript:
newArray = _.concat([1], [2]);
Ergebnis:
// newArray == [1, 2]
Mit dieser Methode ein neues Array zu erhalten, ist ein bisschen sauberer als ein neues Array erstellen und zweimal auf sie rufen Arrayappend.
(Disclaimer: Ich schrieb Underscore.cfc)
Ich nahm dieses von Ben Nadel und dem verwendeten Verschlüsselung und Hashing auszuführen. Lief wie am Schnürchen!
<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>
Eigentlich glaube ich, dass du es von mir hast, haha ... und diesen Thread anschauend, * ich * habe es wahrscheinlich von @nojs Antwort bekommen und es in cfscript umgeschrieben;) – Leigh
Sie können ganz einfach zwei Listen wie diese verketten:
<cfset combolist = ListAppend(lista,listb, ",")>
Also, zuerst Ihre beiden Arrays auf Listen konvertieren ArrayToList()
verwenden. Kombinieren Sie die beiden Listen mit dem ListAppend() und konvertieren Sie die Antwort dann in ein Array mit ListToArray()
.
Ich weiß nicht, wie effizient das ist, aber der Code ist sehr einfach. Ich würde gerne das ArrayAppend() verwenden, aber ich bin in ColdFusion 8.
Bedenke nur, dass es kein komplettes Äquivalent ist wie es wird a) leere Array-Elemente löschen und b) Array-Werte auf jedes Trennzeichen aufteilen '' '. dh der einzelne Wert "arr [1] =" Doe, John "würde" arr [1] = Doe, arr [2] = John "werden. – Leigh
Leigh, du machst einen guten Punkt. Dies könnte mit einem anderen Listenbegrenzer wie ~~~ oder ~! ~! ~! was wahrscheinlich nicht innerhalb des Arrays erscheinen würde. –
Richtig, obwohl mehrere Zeichen in diesem Fall nicht funktionieren. In den meisten Versionen von CF werden mehrere Zeichen als separate Trennzeichen behandelt. Dh '~!' bedeutet, dass CF die Werte durch '~' ** ODER ** '!' abgegrenzt sieht. (Möglicherweise haben sich die Dinge in CF10 geändert). Mit einem einzelnen Zeichen wie ASCII 30 und [leere Listenelemente erhalten] (http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_l_21.html) sollte es viel näher kommen. – Leigh
- 1. Zwei Arrays in Java verbinden?
- 2. Verbinden von Arrays in VB.NET
- 3. Verbinden von zwei Array [Byte] in Scala?
- 4. Verbinden Sie Punkte aus zwei verschiedenen Arrays in Python
- 5. Stopp Coldfusion von Sortier meiner structs/Arrays
- 6. Coldfusion ein Array in zwei
- 7. Verbinden von zwei Telefonnummern
- 8. Mit Formular-Arrays in ColdFusion arbeiten?
- 9. Kämmen von zwei Arrays PHP
- 10. Speicheradressüberlappung von zwei Arrays
- 11. Vergleichen von zwei Arrays
- 12. Verbinden von zwei Linux-Skripten
- 13. Verbinden von zwei asynchronen Anrufen
- 14. Verbinden von zwei vagabundierenden Maschinen
- 15. Verbinden von zwei Client-Socket
- 16. Verbinden von zwei großen Datensätzen in RxJava
- 17. Postgres - Vergleich von zwei Arrays
- 18. Schleife zwei Arrays von json
- 19. äußere verbinden zwei Tabellen
- 20. Verkettung von zwei Arrays in Objective-C
- 21. die Werte von zwei Arrays in php
- 22. Hinzufügen von zwei 2d-Arrays in Javascript
- 23. Korrelation von zwei Arrays in C#
- 24. Compute Kreuzung von zwei Arrays in JavaScript
- 25. In-Place-merge von zwei Arrays
- 26. Verbinden zwei Datenrahmen
- 27. LINQ verketten Elemente in zwei String-Arrays
- 28. zwei numpy Matrizen verbinden
- 29. Zwei Arrays für zwei Werte
- 30. Zwei Liniensegmente verbinden
Seltsamerweise funktionieren zugrunde liegenden Java-Methoden nicht immer wie erwartet. Ich habe immer noch nicht genau herausgefunden wann und warum.Ich benutze oft Java-Methoden zum Entfernen von Duplikaten, Verbinden und Sortieren von Arrays, ich erinnere mich, dass es manchmal nicht funktionierte, je nachdem, wie man Arrays erstellt, welche Operationen du vor dem Aufruf der Java-Methode ausführst. –
@ zarko.susnjar - Ich weiß, das ist ein alter Thread, aber der Grund für die unerwarteten Ergebnisse mit Methoden wie 'removeAll',' retainAll' usw. ist, dass die Java-Methoden nicht so nachsichtig sind wie Ihre typische CF-Funktion. Sie sind normalerweise datensensitiv. So werden '2 '' (string) und 'val (2)' (number) als unterschiedliche Werte/Elemente betrachtet. Wenn Sie nicht absolut sicher sind, dass die Datentypen in beiden Arrays übereinstimmen, verwenden Sie besser andere IMO-Methoden. – Leigh
Natürlich, wenn Sie sich über etwas nicht sicher sind, gehen Sie immer den sichereren und bewährten Weg. –