首页 > 解决方案 > 汇总列表中的动态字段

问题描述

我有一个类似的列表:

<cfset list ="group 1:1; group 2:4; group a:7; group 1:3; group a:1;">

我要做的是计算(总结)第1组,第2组,第a组等中有多少人。现在这些字段是动态的,所以我不知道组的确切名称。

所以这个例子的最终结果是:

group 1: 4
group 2: 4
group a: 8

所以这个列表只是一个例子,实际上它更大,有更多的组(动态名称)。我正在使用 Coldfusion/Lucee。有人可以帮我弄这个吗?

标签: listcoldfusionlucee

解决方案


这只是众多可能的替代方法之一。从使用查询而不是列表作为起始值开始。

我正在做的是用;分隔符循环列表并将值添加到结构中。我稍后使用该结构循环并列出最终总数。

<cfset list ="group 1:1; group 2:4; group a:7; group 1:3; group a:1;">
<cfset totalStruct = {}>
<cfloop list="#list#" item="group" delimiters=';'>
  <cfset groupName = listFirst(group, ':')>
  <cfset groupNameKey = replace(groupName, ' ', '', 'all')>
  <cfset groupValue = val(listLast(group, ':'))>
  <cfif !structKeyExists(totalStruct, groupNameKey)>
    <cfset totalStruct[groupNameKey] = {name:groupName, total=groupValue}>
  <cfelse>
    <cfset totalStruct[groupNameKey].total += groupValue>
  </cfif>
</cfloop>
<cfoutput>
  <ul>
    <cfloop collection="#totalStruct#" item="group">
      <li>#totalStruct[group].name# : #totalStruct[group].total#</li>
    </cfloop>
  </ul>
</cfoutput>

演示


推荐阅读