CF-Arrays durchsuchen

Mischa Sameli, Geschäftsführer & Leiter Entwicklung

Wenn’s ColdFusion nicht kann, ist man mit Java besser dran: Array-Funktionen von Java können direkt in CF angesprochen werden und bieten nützliche Funktionen in Kurzform.

Um Werte in einem ColdFusion-Array zu suchen bleibt in der Regel nur der weg über einen Loop.

1<cfloop from="1" to="ArrayLen(ary)" index="i">
2<cfif ary[i] EQ "suche">
3Treffer
4<cfbreak>
5</cfif>
Gerade bei Grossen Arrays kann das schon ein wenig Performance brauchen. Auf den Loop kann verzichtet werden, wenn das Array zuerst in eine Liste umgewandelt wird. Dann nämlich stehen Listen-Funktionen zur Verfügung.
1<cfif ListValueCount( ArrayToList(ary),"suche" )>
2Treffer!
3</cfif>
Auch hier haben wir bei grossen Arrays natürlich noch ein wenig Belastung, da das ganze Array zuerst in einen String umgewandelt wird und anschliessend werden String-Funktionen zur Wertesuche verwendet. Dies kann aber wiederum umgangen werden, wenn man Java zu Hilfe nimmt:
1<cfif ary.contains("suche")>
2Treffer!
3</cfif>
Natürlich haben die beiden letzten Methoden auch einen Nachteil: sie funktionieren nur mit eindimensionalen Arrays. Mehrdimensionale Arrays werden wohl oder übel ein Loop benötigen. Was bei der Java-Variante zudem zu Bedenken ist: Die Suche ist CaseSensitiv! Interessant wird es, wenn überprüft werden soll, ob alle Werte von Array a in Array b enthalten sind. Da kommt man mit herkömmlichen ColdFusion schon recht ins Schwitzen. Mit Java:
1<cfif b.containsAll(a)>
2Treffer!
3</cfif>
Und ebenfalls noch ganz effizient ist die Variante, Werte von Array a aus Array b zu entfernen:
1b.removeAll(a)
Ebenfalls elegant ist die Möglichkeit, zwei eindimensionale Arrays zusammenzuführen:
1<cfset a.addAll(b) />