我正在尝试仅向此输出添加某些行。目前,此输出添加了所有行,用于
末尾的“总计”行<cfoutput query="qrySummary">
#numberFormat(ArraySum(ListToArray(ValueList(qrySummary.secThreeCount))), ",")#
这显然总计了所有的SecThreeCount值,但是如果我想从该列表中排除最后两行呢?
冷融可能吗?
(如果这有所不同)&gt;&gt;所以有13行返回,我想要前11行并排除最后2行。
我知道我可以限制该查询的SQL返回以排除这两行,但我希望编写更少的代码并保持整洁。并且还要了解它是否可能:)
提前致谢。
答案 0 :(得分:3)
嗯,我认为如果你不需要这两行,你不应该首先归还它们。那将是最好的答案。从你的陈述“但我想要更少的代码来编写”你在错误的地方进行优化:不要为自己优化 ,优化解决方案。
Leigh来到我的下方,因为我一直在为此测试代码,但这是使用subList()
的概念证明:
numbers = queryNew("");
queryAddColumn(numbers, "id", "integer", [1,2,3,4,5,6]);
queryAddColumn(numbers, "maori", "varchar", ["tahi", "rua", "toru", "wha", "rima", "ono"]);
maori = listToArray(valueList(numbers.maori));
subset = maori.subList(2,5);
writeDump([numbers, subset]);
这将返回一个包含元素["toru","wha","rima"]
的数组。
答案 1 :(得分:1)
如果您正在运行CF10,则有一个选项正在使用ArraySlice。只获取前十一个元素,然后应用arraySum
。
<cfset allValues = ListToArray(ValueList(qrySummary.secThreeCount))>
<cfset subTotal = arraySum( arraySlice(allValues, 1, 11))>
对于早期版本,有未记录的subList(...) approach。它充分利用了CF阵列是java.util.List
对象的事实,并使用List.subList(..)
来获取数组的子集。
答案 2 :(得分:1)
另一种方法。您不想为最后2个元素添加值,因此请从数组中删除它们:
<cfset values = ListToArray(ValueList(qrySummary.secThreeCount))>
<!--- delete the last element --->
<cfset arrayDeleteAt(values, arrayLen(values))>
<!--- delete the last element again --->
<cfset arrayDeleteAt(values, arrayLen(values))>
#numberFormat(ArraySum(values), ",")#
或者,鉴于你无论如何都要循环查询,你可以随意添加总数(如果你在最后一行或倒数第二行,只需要一点点逻辑就不会打扰)