难倒列表,字符串操作问题

时间:2014-03-21 13:07:52

标签: coldfusion

给出以下列表(#oldList#): category1_item1, category1_item2, category2_item1, category3_item1, category3_item2"

如何创建以下列表(#newList#)?: category1[item1&item2],category2[item1],category3[item1&item2]

这是我到目前为止所做的:

<cfset newList = "">
<cfset category = "">

<cfloop list="#oldList#" index="listElement">
    <cfset endPos = find("_", listElement)>
    <cfset listElementCategory = left(listElement, endPos)>
    <cfset listElementItem = replace(listElement, listElementCategory, "")>

    <cfif listElementCategory is not category>
        <cfset modifiedElement = replace(listElementCategory, "_", "") & "[" & listElementItem>
    <cfelse>
        <cfset modifiedElement = "&" & listElementItem>
    </cfif>

    <cfset category = listElementCategory>

    <cfset newList = newList & modifiedElement>
</cfloop>

此代码导致: category1[item1&item2category2[item1category3[item1&item2

我无法弄清楚如何用“],”。

关闭每个“分组”的项目

1 个答案:

答案 0 :(得分:1)

<cfset newList = "">
<cfset category = "">

<cfloop list="#oldList#" index="listElement">
    <cfset endPos = find("_", listElement)>
    <cfset listElementCategory = left(listElement, endPos)>
    <cfset listElementItem = replace(listElement, listElementCategory, "")>

    <cfif listElementCategory is not category>
        <cfif category is not "">
            <!--- category has changed and this isn't the first record, so close previous category --->
             <cfset newList = newList & "],">  
        </cfif>
        <cfset modifiedElement = replace(listElementCategory, "_", "") & "[" & listElementItem>
    <cfelse>
        <cfset modifiedElement = "&" & listElementItem>
    </cfif>

    <cfset category = listElementCategory>

    <cfset newList = newList & modifiedElement>
</cfloop>

注意我刚添加了这个块:

<cfif category is not "">
   <!--- category has changed and this isn't the first record, so close previous category --->
   <cfset newList = newList & "],">  
</cfif>

编辑:

几乎忘记了循环的结束!在</cfloop>关闭括号之后:

<cfif category is not "">
   <!--- close the final bracket since we have at least one record --->
   <cfset newList = newList & "]">  
</cfif>