Esiste un metodo migliore per risolvere tali problemi?
In genere consiglio di utilizzare array anziché elenchi.
In CF9 un loop simile al tuo è buono come si arriva. Puoi farne una funzione di utilità se ne hai bisogno più di una volta. Questo evita StructKeyList()
per essere in grado di affrontare tutti i tipi di chiavi, indipendenti di un carattere separatore:
<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>
e
<cfset nkeys = GetNumericKeys(st)>
In CF11 è possibile ottenere un po 'più sofisticato (testati su CF11, non posso dire come CF10 gestisce questo codice).
<cfscript>
numericIDs = arrayFilter(structKeyArray(st), function (key) {
return IsNumeric(key);
});
</cfscript>
Per garantire chiavi intere, utilizzare:
<cfscript>
numericIDs = arrayFilter(structKeyArray(st), function (key) {
return Int(key) eq key;
});
</cfscript>
userei una matrice piuttosto che una lista, ma a parte questo, questo approccio sembra che vada bene. Ci sono opzioni migliori con versioni più recenti di CF, ma se sei bloccato su CF9, così sia. –