如何使用字典顺序按字典顺序对结构进行重新排序?

时间:2011-09-12 15:33:34

标签: coldfusion coldfusion-9

使用API​​进行开发,我在ColdFusion中有一个结构。我需要按字典顺序使用字节顺序对结构进行重新排序。

“按字典顺序排序参数[sic](字节排序,标准排序,不自然或不区分大小写)。如果参数名称相同,则按值排序。”

采用ColdFusion 9中的结构,我如何重新排序以符合上述要求? JAVA Lib?

谢谢

3 个答案:

答案 0 :(得分:5)

我将把这个作为一个单独的答案发布,因为我相信我的第一个是不正确的......让我们试试这个:

<cfset myStruct = structNew() />
<cfset mystruct["Apple"] = 1 />
<cfset mystruct["Banana"] = 2 />
<cfset mystruct["car"] = 5 />
<cfset mystruct["Tomato"] = 3 />
<cfset mystruct["aardvark"] = 4 />

<cfset Keys = StructKeyArray(myStruct) />
<cfset ArraySort(Keys, "textnocase") />

<cfdump var="#Keys#">

这将为您提供按字典顺序排序的一系列键,忽略所有外壳。 StructSort函数对键值进行排序,而不是键名。

答案 1 :(得分:3)

很抱歉我的困惑,但不是词典排序和自然排序(至少与Java Strings)相同的事情?如果是这样,请查看Java TreeMap,看看它是否按照您希望的方式工作。

<cfset myStruct = structNew() />
<cfset mystruct["Apple"] = 1 />
<cfset mystruct["Banana"] = 2 />
<cfset mystruct["car"] = 5 />
<cfset mystruct["Tomato"] = 3 />
<cfset mystruct["aardvark"] = 4 />


<cfset myMap = createObject("java","java.util.TreeMap").init(myStruct) />

<cfdump var="#myMap#">

答案 2 :(得分:2)

您无法在技术上对结构进行排序,并保证结构将维持其顺序。当你添加/删除节点时,ColdFusion有一个任意(至少就我所知)重新排序结构的坏习惯。

但是,您可以获取已排序键的列表,然后可以使用它来遍历结构。使用StructSort方法获取已排序的键名称数组。您可以将排序顺序指定为textnocase以获取字典顺序(忽略所有大小写)。

然后你需要做一些额外的排序,以便在那之后按价值获得...如果你想要更多的细节,你最好发布一些你已经尝试过的代码不太合适的代码。