Coldfusion Struct只获取数字键列表

时间:2015-11-26 11:29:44

标签: coldfusion coldfusion-9

我有一个coldfusion Struct,包含数字和字母混合键,字母数字

我只需要访问数字键。

我的代码看起来像

<cfset ids = structkeyList(st ) />
<cfset numericIDs = "" />
<cfloop list="#ids#" index="i">
    <cfif IsNumeric(i)>
        <cfset numericIDs = ListAppend( numericIDs , i ) />
    </cfif>
</cfloop>

有没有更好的方法来解决这些问题?

4 个答案:

答案 0 :(得分:6)

  

有没有更好的方法来解决这些问题?

我会用这样的东西:

/list

答案 1 :(得分:4)

  

有没有更好的方法来解决这些问题?

我通常建议使用数组而不是列表。

在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>

答案 2 :(得分:0)

我真的不明白这有什么问题。它应该已经很好用,并且非常易读。

有时使用List比使用List更快。

答案 3 :(得分:0)

我有这个:

strtol()

也可以使用正则表达式:

<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>