Coldfusion 结构仅获取数字键列表
Coldfusion Struct getting only numeric key list
我有一个包含混合键数字和字母、字母数字的 coldfusion 结构
我只需要访问数字键。
我的代码看起来像
<cfset ids = structkeyList(st ) />
<cfset numericIDs = "" />
<cfloop list="#ids#" index="i">
<cfif IsNumeric(i)>
<cfset numericIDs = ListAppend( numericIDs , i ) />
</cfif>
</cfloop>
有没有更好的方法解决此类问题?
Is there a better method to solve such problems?
我通常建议使用数组而不是列表。
在 CF9 中,与您的类似的循环已尽其所能。如果你不止一次需要它,你可以用它制作一个效用函数。这避免了 StructKeyList()
能够处理各种键,独立于分隔符:
<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 中你可以更复杂一些(在 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>
Is there a better method to solve such problems?
我会用这样的东西:
<cfset numericIDs = arrayToList(reMatch('\b\d+(?=,|$)\b', structKeyList(st)))>
我真的不明白这有什么问题。它应该已经很好用了,而且可读性很好。
有时使用列表比使用数组更快。
我有这个:
<cfscript> function ListNumeric(principal) {
a=principal;
cleanlist = ''; for (i=1; i <= ListLen(a);i=i+1) { if(IsNumeric(ListGetAt(a,i))){ cleanlist = ListAppend(cleanlist,ListGetAt(a,i)); } } Return cleanlist; } </cfscript>
也可以使用正则表达式:
inList2 = REReplace(inList,"[^0-9.]", "","ALL");
我有一个包含混合键数字和字母、字母数字的 coldfusion 结构
我只需要访问数字键。
我的代码看起来像
<cfset ids = structkeyList(st ) />
<cfset numericIDs = "" />
<cfloop list="#ids#" index="i">
<cfif IsNumeric(i)>
<cfset numericIDs = ListAppend( numericIDs , i ) />
</cfif>
</cfloop>
有没有更好的方法解决此类问题?
Is there a better method to solve such problems?
我通常建议使用数组而不是列表。
在 CF9 中,与您的类似的循环已尽其所能。如果你不止一次需要它,你可以用它制作一个效用函数。这避免了 StructKeyList()
能够处理各种键,独立于分隔符:
<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 中你可以更复杂一些(在 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>
Is there a better method to solve such problems?
我会用这样的东西:
<cfset numericIDs = arrayToList(reMatch('\b\d+(?=,|$)\b', structKeyList(st)))>
我真的不明白这有什么问题。它应该已经很好用了,而且可读性很好。
有时使用列表比使用数组更快。
我有这个:
<cfscript> function ListNumeric(principal) {
a=principal;
cleanlist = ''; for (i=1; i <= ListLen(a);i=i+1) { if(IsNumeric(ListGetAt(a,i))){ cleanlist = ListAppend(cleanlist,ListGetAt(a,i)); } } Return cleanlist; } </cfscript>
也可以使用正则表达式:
inList2 = REReplace(inList,"[^0-9.]", "","ALL");