ListFind, ListValueCount oder ListContains?

Mischa Sameli, Geschäftsführer & Leiter Entwicklung

Viele Wege führen nach Rom – so auch, wenn man mit ColdFusion nach bestimmten Werten in Listen sucht. Doch nicht immer überzeugt das Resultat. Zum Beispiel wenn ListContains verwendet wird, um nach einem exakten Wert suchen.

ListFind, ListValueCount und ListContains – drei Funktionen, mit denen sich Listen in ColdFusion bequem nach bestimmten Einträgen durchsuchen lassen. Grosse Unterschiede gibt es tatsächlich nicht. Aber wie so oft steckt der Teufel im Detail, wie ich heute beim Bug-Fixing feststellen durfte. Zur Veranschaulichung der Problematik nehmen wir folgende Liste:

1<cfset myList = "1,2,3,44,5" />

Nun wollen wir wissen, ob die Liste einen Listenwert 4 enthält und benutzen dabei die drei erwähnten Funktionen.

1<cfoutput>
2ListFind: #ListFind(myList, "4")#<br/>
3ListValueCount: #ListValueCount(myList, "4")#<br/>
4ListContains: #ListContains(myList, "4")#
5</cfoutput>

Das Ergebnis?

  • ListFind liefert den Wert 0, da kein Listenwert exakt dem Suchbegriff entspricht. Die Übereinstimmung muss als 100 Prozent sein. Es wird kein Teilstring innerhalb eines Listenindexes verglichen. Der Rückgaberwert von ListFind ist schliesslich der Listendex des ersten Treffers – kein Treffer = 0.
  • ListValueCount leifert ebefalls 0 als Rückgabewert. Und zwar weil unser Suchbegriff 0 mal vorgekommen ist. Auch hier muss die Übereinstimmung für jedes einzelne Listenelement 100prozentig sein. Im Gegensatz zu ListFind liefert ListValueCount die Anzahl Fundstellen zurück.
  • ListContains schliesslich beglückt uns mit dem Ergebnis 4, was in diesem Fall bedeutet, dass an der vierten Position in der Liste der Suchbegriff vorgekommen ist. ListContains sucht folglich auch nach Teilstrings.