tcl基础——列表排序lsort

tcl基础——列表排序lsort

彻底搞定lsort,看这一篇就够啦~
整理下lsort列表排序的相关用法:在处理对次序、排列等有一定要求的数据时,相比于无限嵌套循环foreach、while等,了解如何用lsort对列表list中的元素进行排序,简单一句命令或许就事半功倍。

语法

lsort -option -option list
对列表 list 中的元素以option指定方式进行排序,并返回排序后的新列表。
默认情况下,以元素的首字符按ASCII表的字符顺序递增排序,若首字符相同,对比第二个字符,往后以此类推。

选项

optiondescription
-ascii以ASCII表的字符顺序递增排序,为默认排序方式。对于常见的字母和数字来说,从小到大排序如下:部分字符<0-9<A-Z<a-z。
lsort {a10 B2 b1 a1 a2}
B2 a1 a10 a2 b1
-dictionary字典关系排序,大致与-ascii相同,递增排序,两点不同:1.忽略了大小写关系,按字母a/A到z/Z递增排序;2.把数字字符看作是数值来处理,数值从小到大递增排序。
lsort -dictionary {a10 B2 b1 a1 a2}
a1 a2 a10 b1 B2
-integer将列表元素从字符转换为整数,并使用整数数值比较,递增排序。
lsort -integer {5 3 1 2 11 4}
1 2 3 4 5 11
lsort -integer {1 2 0x5 7 0 4 -1}; ###0x5为十六进制,十进制数值为5
-1 0 1 2 4 0x5 7
-real将列表元素从字符转换为浮点数,并使用浮点数数值比较,递增排序。
lsort -real {5 3 1 2 11 4};###整数也按浮点数数值进行比较
1 2 3 4 5 11
lsort -real {.5 0.07e1 0.4 6e-1}
0.4 .5 6e-1 0.07e1
-command cmds使用cmds作为比较命令。由cmds命令组成的脚本,再附加两个元素共同组成,若第一个元素大于、等于或小于第二个元素,lsort分别对应返回一个大于、等于或小于零的整数。
proc compare {a b} {cmds};###自定义的排序方式
lsort -command compare list
-increasing按递增顺序对列表元素进行排序,默认为递增排序。
-decreasing按递减顺序对列表元素进行排序。
-indices返回排序后的元素在原列表中的索引。
lsort -indices {c a b};###排序后的列表{a b c},a b c分别在原列表{c a b}中的索引值为1 2 0
1 2 0
-index indexList若指定该选项,没有指定-stride选项,则列表中每个元素本身必须是一个子列表。lsort将会从每个子列表中提取第indexList个元素进行比较;若子列表中还包含子列表,则indexList还可以是索引的列表,解析方式与lindex相同,并且支持string index。
lsort -integer -index 1 {{First 24} {Second 18} {Third 30}};###按子列表中第二个元素的整数值递增排序;
{{Second 18} {First 24} {Third 30}}
lsort -index end-1 {{a 1 e i} {b 2 3 f g} {c 4 5 6 d h}};###按子列表中倒数第二个元素的ascii字符递增排序;
{c 4 5 6 d h} {a 1 e i} {b 2 3 f g}
-stride strideLength指定此选项,则将列表中strideLength个元素视为一组,若没有指定-index选项,按多组列表中的第一个元素进行排序,若指定了-index选项,按每组中-index指定索引的元素进行排序。元素在其组中始终保持相同的位置。要注意的是:列表长度必须是strideLength的整数倍,并且最小为2。即在使用时原列表至少有两个元素,并保证原列表元素个数可以被strideLength整除。
lsort -stride 2 {a 10 b 1 c 3}
{a 10 b 1 c 3}
lsort -stride 2 -index 1 -integer {a 10 b 1 c 3}
{b 1 a 10 c 3}
-nocase比较时不区分大小写。与-dictionary、-integer、-real选项同时使用时无效。
-unique如果指定了此选项,则只保留列表中找到的最后一组重复元素
lsort -unique {a b c a b c a b c}
a b c
lsort -unique {{a 1} {b 1} {c 3}}
{{a 1} {b 1} {c 3}}
lsort -unique -index 1 {{a 1} {b 1} {c 3}};###按子列表中第一个元素排序,{a 1}和{b 1}重复,因此只保留了{b 1}
{{b 1} {c 3}}

总结

命令到用时方恨少,需要时刻提醒自己:菜就多练,笨就多学。

参考:
https://blog.csdn.net/asty9000/article/details/89644133
https://blog.csdn.net/dulixin/article/details/2195139?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-2-2195139-blog-89644133.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-2-2195139-blog-89644133.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=5
  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值