このような問題を解決する方法はありますか?
リストの代わりに配列を使って作業することをお勧めします。
CF9では、あなたのものに似たループが得られます。何度も必要な場合は、それからユーティリティー機能を作り出すことができます。この1は、区切り文字の独立したキーのすべての種類を扱うことができるようにStructKeyList()
を回避:
CF11で
<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>
と
<cfset nkeys = GetNumericKeys(st)>
あなたは、もう少し洗練され得ることができます(テストCF11では、このコードをどのようにCF10が処理するのかは分かりません)。
<cfscript>
numericIDs = arrayFilter(structKeyArray(st), function (key) {
return IsNumeric(key);
});
</cfscript>
整数キーを確保するためには、使用:
<cfscript>
numericIDs = arrayFilter(structKeyArray(st), function (key) {
return Int(key) eq key;
});
</cfscript>
、そのアプローチは罰金です。最近のバージョンのCFではより良いオプションがありますが、もしCF9でスタックされていれば、そうなるでしょう。 –