Как пересортировать структуру с помощью лексикографического упорядочения байтов? - PullRequest
1 голос
/ 12 сентября 2011

Разрабатывая с помощью API, у меня есть структура в ColdFusion.Мне нужно пересортировать структуру с помощью лексикографического упорядочения байтов.

"Сортировать параметры по имени лексикографически [sic] (порядок следования байтов, стандартная сортировка, не натуральная или без учета регистра). Если параметры имеют одинаковыеимя, затем сортируйте по значению. "

Принимая структуру в ColdFusion 9, как я могу изменить ее порядок в соответствии с приведенным выше?JAVA Lib?

Спасибо

Ответы [ 3 ]

5 голосов
/ 12 сентября 2011

Я собираюсь опубликовать это как отдельный ответ, потому что я считаю, что мой первый ответ неправильный ... Давайте попробуем этот вместо:

<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 сортировала значения ключей, а не имена ключей.

3 голосов
/ 12 сентября 2011

Извините за путаницу, но разве лексикографическая и естественная сортировка (по крайней мере, для строк Java) не одно и то же?Если это так, взгляните на 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 голосов
/ 12 сентября 2011

Вы не можете технически отсортировать структуру и гарантировать, что структура будет поддерживать ее порядок. У ColdFusion плохая привычка произвольно (по крайней мере, насколько я могу судить) переупорядочивать структуры при добавлении / удалении узлов.

Однако вы можете получить список отсортированных ключей, которые затем сможете использовать для циклического просмотра структуры. Используйте метод StructSort , чтобы получить массив отсортированных имен ключей. Вы можете указать порядок сортировки как textnocase, чтобы получить лексикографический порядок (без учета всех регистров).

Затем вам нужно будет выполнить дополнительную сортировку, чтобы получить их по значению после этого ... Если вам нужны более подробные сведения, вам лучше опубликовать уже пробованный код, который не совсем работает.

...