我有一个项目列表,这些项目的格式不一致,我需要排序。
item 1, item 3.0 ,item 8 , item 1.0 , item 4, item 5, item 6, item 10
基本上,一些项目可以在逗号(,)之前或之后有空格(多个偶数)。
我尝试listtoarray然后排序,但我发现排序保留了空格,使得第1项和第1.0项无法正确排序。我以为我可以使用listtoarray删除空格,但也许我正在考虑一个不同的函数,或者我需要通过循环遍历我的列表?
有人可以在这个基本任务上刷新我的记忆吗?
已更新 预期结果应为:
第1项,第10项,第3.0项,第4项,第5项,第6项,......等
答案 0 :(得分:8)
您可以先剪裁空格然后再排序。请尝试以下代码
<cfscript>
myList="item 1, item 3.0 ,item 8 , item 1.0 , item 4, item 5, item 6, item 10";
myList=ListMap(myList,function(item){return Trim(item);});
myList = listSort(myList, "textnocase", "asc");
writeOutput(myList);
</cfscript>
更新
这可以使用listMap来完成
+----+---------+---------------+--------+------------+
| id | item_id | property_name | value | timestamp |
+----+---------+---------------+--------+------------+
| 1 | 1 | color | blue | 2018-01-01 |
| 2 | 1 | size | large | 2018-01-01 |
| 3 | 1 | weight | 65 | 2018-01-01 |
<SNIP>
| 15 | 1 | color | purple | 2018-02-01 |
| 16 | 1 | weight | 69 | 2018-02-01 |
+----+---------+---------------+--------+------------|
答案 1 :(得分:3)
对于正则表达式选项,您可以使用匹配模式\s*,\s*
。此模式读取为匹配任何,
之前有0个或更多空白字符,之后有0个或更多空格字符。然后,我们可以使用reReplace
将这些匹配替换为不带空格的,
。
<cfscript>
myList="item 1, item 3.0 ,item 8 , item 1.0 , item 4, item 5, item 6, item 10";
myList = reReplace(trim(myList), "\s*,\s*", ",", "all");
myList = listSort(myList, "textnocase", "asc");
writeOutput(myList);
</cfscript>
答案 2 :(得分:2)
这是使用相同基本思想的另一种方式。循环遍历列表项并修剪它们,然后最终排序。工作示例here
<cfscript>
myList = "item 1, item 3.0 ,item 8 , item 1.0 , item 4, item 5, item 6, item 10";
i = 1;
for (item in myList) {
myList = listSetAt(myList, i, trim(item));
i++;
}
myList = listSort(myList, "textnocase", "asc");
writeOutput(myList);
</cfscript>