使用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