【问题标题】:ListRemoveDuplicates result has a comma at the endListRemoveDuplicates 结果末尾有逗号
【发布时间】:2016-06-30 22:00:25
【问题描述】:

在 Lucee 中使用 listRemoveDuplicates 时,它会删除重复的值,但仍将分隔符留在值的末尾。

例如:

<cfset myUsers = 'sathish,sathish'>
<cfset removeDups = listRemoveDuplicates(myUsers)>

<cfdump var="#removeDups#" />

这会产生输出:

sathish, 

但是,当使用 Adob​​e ColdFusion 检查相同的函数时,它会产生正确的值(末尾没有逗号):

sathish

如何在 Lucee 中省略逗号分隔符?

【问题讨论】:

标签: list coldfusion coldfusion-10 lucee


【解决方案1】:

浏览 Lucee 文档,我找到了返回正确值的 ListCompact() 函数。

<cfset myUsers = 'sathish,sathish'>
<cfset removeDups = listCompact(listRemoveDuplicates(myUsers))>
<cfdump var="#removeDups#" />

【讨论】:

  • 此功能仅适用于lucee服务器。不是土坯coldfusion .. :-(
  • 另一种解决方法是将其转换为数组并再次返回:arrayToList(listToArray(removeDups))。比ListCompact 更笨拙,但如果这是一个问题,它与两个引擎都兼容。
【解决方案2】:

您还可以像这样创建自定义函数:

<cffunction name="UDF_listRemoveDuplicates" access="public">
    <cfargument name="list" type="string" required="yes">

    <!--- Hash Map to maintain the order --->
    <cfset local.hashMap = createObject("java", "java.util.LinkedHashMap").init()>

    <!--- Add list values as key to Hash Map --->
    <cfloop list="#arguments.list#" index="local.value" delimiters=",">
        <cfset local.hashMap[local.value] = 1>
    </cfloop>

    <!--- Return list of Keys --->
    <cfreturn structKeyList(local.hashMap, ",")>
</cffunction>

<cfoutput>#UDF_listRemoveDuplicates("sathish,sathish")#</cfoutput>

这应该适用于两者。 (未在 Lucee 上测试)

【讨论】:

  • 感谢@Beginner 的回答。它已经在 Adove Coldfusion 服务器中运行良好。但我只面临 Lucee 服务器的问题。我们不会为这个问题创建这样的自定义函数。该问题也通过该函数 listCompact() 解决。
  • 太棒了!您的答案正在使用 lucee。非常感谢.. :-)
  • 初学者有一个疑问,这里为什么需要为linkedHashMap创建对象??我们要不要创建一个结构变量来存储循环数据??
  • @SathishK - 使用它是因为 LinkedHashMap 维护原始列表项的顺序。常规结构不会。
  • @Beginner - 一个重要的区别是,与 CF 结构不同,LinkedHashMap 区分大小写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多