我有一系列可以变化的产品尺寸。
有些情况会是。
08
10
12
16
18
S
M
L
XL
XXL
我似乎能够轻松地对数值的数组进行排序,但是当大小调整也包含它时,我似乎也不能按字母顺序对它们进行排序
实施例 它最终成为
L
M
S
XL
XXL
技术上说,这对于字母顺序是正确的,但是对于人类的顺序应该是
S
M
L
XL
XXL
有人知道使用Coldfusion的方法吗?我目前正在使用CF 8,并且到处寻找排序,但似乎无法找到如何做到这一点
答案 0 :(得分:3)
如果你正在使用CF10 +,那么你很幸运!
https://wikidocs.adobe.com/wiki/display/coldfusionen/ArraySort
实现您自己的回调函数,自行对您的集合进行排序,例如:
<cfscript>
function sortSize(array sizes)
{
var sizeOrder = "XXS,XS,S,M,L,XL,XXL"; // your sort order
arraySort(sizes, function(s1, s2) {
return listFindNoCase(sizeOrder,s1) - listFindNoCase(sizeOrder,s2);
});
return sizes;
}
</cfscript>
在TryCF上运行上面的代码:http://www.trycf.com/scratch-pad/pastebin?id=pb1rn6CT
更新:但由于您使用的是CF8,因此您可以实施自己的冒泡排序并尝试:
<cfscript>
function sortSize(input)
{
var local = {};
local.sizes = "XXS,XS,S,M,L,XL,XXL"; // your sort order
local.sorted = false;
local.inputSize = arrayLen(input);
while (!local.sorted)
{
local.sorted = true;
for (local.i = 1; local.i < local.inputSize; local.i = local.i + 1)
{
local.size1 = listFindNoCase(local.sizes, input[local.i]);
local.size2 = listFindNoCase(local.sizes, input[local.i + 1]);
if (local.size1 > local.size2)
{
arraySwap(input, local.i, local.i + 1);
local.sorted = false;
}
}
}
return input;
}
</cfscript>
<cfdump var="#sortSize(listToArray('l,M,M,s,XL,Xs'))#">
在TryCF上运行上面的代码:http://www.trycf.com/scratch-pad/pastebin?id=uL7r9Uyf
答案 1 :(得分:3)
就个人而言,我不想再回过头来搞清楚泡泡,合并或任何其他排序算法。我可能会采取以下步骤:
left join
并确保捕获不适合原始表的大小,以便您可以错误地,报告或随机化任何不匹配的数据。将整个过程封装到UDF或应用程序作用域单例的方法中,以便重复调用。