使用CFML(ColdFusion Markup Langauge,又名ColdFusion),如何比较两个单维数组是否相同?如何使用CFML测试两个数组是否相同?
回答
假设数组中的所有值都是简单值,最简单的事情可能是将数组转换为列表,然后进行字符串比较。
<cfif arrayToList(arrayA) IS arrayToList(arrayB)>
Arrays are equal!
</cfif>
不像其他解决方案那样优雅,但却很简单。
有一种使用CFML的底层java比较两个数组的非常简单的方法。根据Adobe的Rupesh Kumar最近发布的博客(http://coldfused.blogspot.com/),ColdFusion数组是Java列表(java.util.List)的一个实现。所以所有的Java列表方法都可用于CFML数组。
所以要比较2个数组,所有你需要做的就是使用equals方法。如果数组相等则返回YES,否则返回NO。
<cfset array1 = listToArray("tom,dick,harry,phred")/>
<cfset array2 = listToArray("dick,harry,phred") />
<cfset array3 = listToArray("tom,dick,harry,phred")/>
<cfoutput>
Array2 equals Array1 #array2.equals(array1)# (returns a NO) <br/>
Array3 equals Array1 #array3.equals(array1)# (returns a YES) <br/>
</cfoutput>
很多时候人们忘记了我们可以用Java来完成任务。优秀的建议。 – rip747 2009-02-12 13:40:24
的arrayCompare()在cflib用户定义的函数应该这样做 http://cflib.org/index.cfm?event=page.udfbyid&udfid=1210
JASONS答案肯定是最好的,但是这是我以前做过执行的对象的哈希比较已序列化为WDDX。
此方法仅适用于相对较小的数组,但如果要纯粹保留CFML,则这是另一种选择。它也有好处,你可以将该方法应用于其他数据类型以及...
编辑:亚当斯的完全正确(正如你可以看到他的数字) - JSON更经济,不仅在这情况,但对于一般的序列化。在我的辩护中,我被卡在使用没有内置JSON函数的CFMX 6.1,并试图避免外部库。
建立在詹姆斯的答案上,我认为JSON可能比WDDX更受欢迎。事实上,它证明是相当有效的。比较哈希并不昂贵,但是序列化数据然后生成哈希可能是(对于更大和/或更复杂的数据结构)。
<cfsilent>
<!--- create some semi-complex test data --->
<cfset data = StructNew() />
<cfloop from="1" to="50" index="i">
<cfif variables.i mod 2 eq 0>
<cfset variables.data[variables.i] = StructNew()/>
<cfset tmp = variables.data[variables.i] />
<cfloop from="1" to="#variables.i#" index="j">
<cfset variables.tmp[variables.j] = 1 - variables.j />
</cfloop>
<cfelseif variables.i mod 3 eq 0>
<cfset variables.data[variables.i] = ArrayNew(1)/>
<cfset tmp = variables.data[variables.i] />
<cfloop from="1" to="#variables.i#" index="j">
<cfset variables.tmp[variables.j] = variables.j mod 6 />
</cfloop>
<cfset variables.data[variables.i] = variables.tmp />
<cfelse>
<cfset variables.data[variables.i] = variables.i />
</cfif>
</cfloop>
</cfsilent>
<cftimer label="JSON" type="inline">
<cfset jsonData = serializeJson(variables.data) />
<cfset jsonHash = hash(variables.jsonData) />
<cfoutput>
JSON: done.<br />
len=#len(variables.jsonData)#<br/>
hash=#variables.jsonHash#<br />
</cfoutput>
</cftimer>
<br/><br/>
<cftimer label="WDDX" type="inline">
<cfwddx action="cfml2wddx" input="#variables.data#" output="wddx" />
<cfset wddxHash = hash(variables.wddx) />
<cfoutput>
WDDX: done.<br />
len=#len(variables.wddx)#<br/>
hash=#variables.wddxHash#<br />
</cfoutput>
</cftimer>
这里的,上面的代码生成我的机器上输出:
JSON: done.
len=7460
hash=5D0DC87FDF68ACA4F74F742528545B12
JSON: 0ms
WDDX: done.
len=33438
hash=94D9B792546A4B1F2FAF9C04FE6A00E1
WDDX: 47ms
虽然数据结构,我序列化是相当复杂的,它很容易被认为是小的。这应该会使得通过WDDX的JSON序列化效率更加可取。无论如何,如果我尝试使用散列比较来编写“compareAnything”方法,那么我会在WDDX上使用JSON序列化。
我一直在考虑使用CF的原生Java对象,而这个问题让我想起了一些我的书签作为搜索结果的书签。
ColdFusion数组实际上是java list(java.util.List)的一个实现。所有列表方法实际上都可用于Array。 CF使用数组函数提供了大部分列表功能,但是对于不能直接使用CF函数的java列表,很少有可能。
- 合并两个阵列
- 在另一个阵列的中间追加数组
- 搜索数组中的元素
- 搜索阵列1,以查看是否阵列2的元件的所有发现
- 平等检查
- 从阵列2
删除在阵列1的元素来源:http://coldfused.blogspot.com/2007/01/extend-cf-native-objects-harnessing.html
另一种资源,我发现展示了如何使用本地Java Array类来获得独特的价值和创建自定义排序的情况下,你需要排序日期的阵列,例如功能。
http://www.barneyb.com/barneyblog/2008/05/08/use-coldfusion-use-java/
这第二个链接包含链接到其他职位在这里笔者展示了如何使用其他Java类本身获得任何功能或速度超过CF功能。
所有这些解决方案都检查两个数组是否相等。他们不检查他们是同一个对象。我知道在原生CF中这样做的唯一方法是以某种方式更改对象,并查看两个引用是否有变化。我也认为应该谨慎依赖CF实现某些Java类,或者揭露方法。这些可能会改变。
至于比较两个阵列以查看是否内容是相同的,为什么不只是 检查长度(如果不同返回false) 如果长度是相同的,从1到阵列LEN并检查元件是相同的如果不是,就打破并返回假。
这将适用于简单的值。
- 1. 如何测试两个数组是否共享相同的内存块?
- 2. 测试两个数据库数据是否相同
- 3. 如何测试数组中的所有项目是否相同?
- 4. 使用Easy68K测试两个数字是否相等
- 5. 测试两个对象是否相等
- 6. 如何检查两个数组是否相同?
- 7. 确定语法是否是使用两两不相交测试
- 8. 如何在xunit.net中测试两个对象是否相等?
- 9. 如何测试python中两个对象是否相等?
- 10. 测试两个二叉搜索树是否具有相同的一组元素?
- 11. 如何测试两个jQuery包装的DOM元素是否相同?
- 12. 如何使用closedxml测试两个单元在excel中是否相等?
- 13. 给定两个字符串长度,测试两个字符串是否相同
- 14. 我如何验证两个组件的值是否相同? JSF
- 15. 如何检查两个元组列表是否相同
- 16. 检查一个数组中的两个项是否相同
- 17. 确定两个数组是否相同排列?
- 18. 查找两个字符串是否在数组中相同?
- 19. 如何检查列表中的两个数字是否相同
- 20. 如何检查两个数组是否相等?
- 21. Java:如何检查两个数组是否以相同的顺序?
- 22. Javascript数组:如何检查连续两个单词是否相同?
- 23. 测试两个目标具有相同的测试
- 24. 如何测试列中的所有项目是否相同
- 25. 如何使用soap ui测试其余请求和响应是否相同?
- 26. 如何测试数组中是否重复一个值?
- 27. 如何测试数组是否至少包含一个元素
- 28. Python单元测试:测试两个角度是否几乎相等
- 29. 测试两个函数变量指向相同的函数吗?
- 30. 如何找出两个String数组是否等同于其他
假设简单的数组,这很容易成为最快最简单的解决方案 – Jason 2008-10-07 19:22:17