Gibt es eine bessere Methode, um solche Probleme zu lösen?
Ich würde generell empfehlen, mit Arrays statt Listen zu arbeiten.
In CF9 ist eine Schleife ähnlich wie Ihre ist so gut wie es geht. Sie können eine Dienstprogrammfunktion daraus machen, wenn Sie sie mehrmals benötigen. Dies vermeidet man StructKeyList()
die Lage sein, mit allen Arten von Schlüsseln zu behandeln, unabhängig von einem Trennzeichen:
<cfscript>
function GetNumericKeys(struct) {
var keys = struct.keys();
var result = ArrayNew(1);
var key = "";
while (keys.hasNext()) {
key = keys.next();
if (IsNumeric(key)) ArrayAppend(result, key);
}
return result;
}
</cfscript>
und
<cfset nkeys = GetNumericKeys(st)>
In CF11 Sie ein wenig anspruchsvollen (getestet bekommen auf CF11, kann nicht sagen, wie CF10 diesen Code behandelt).
<cfscript>
numericIDs = arrayFilter(structKeyArray(st), function (key) {
return IsNumeric(key);
});
</cfscript>
Um ganzzahlige Schlüssel zu gewährleisten, verwenden:
<cfscript>
numericIDs = arrayFilter(structKeyArray(st), function (key) {
return Int(key) eq key;
});
</cfscript>
ich eher einen Array verwenden würde, als eine Liste, aber abgesehen davon, dass Ansatz scheint in Ordnung. Es gibt bessere Möglichkeiten mit neueren Versionen von CF, aber wenn Sie auf CF9 stecken, so sei es. –