1.lsearch
在命令列表中查找指定的元素,获取两个参数,第一个是一个列表,第二个是一个模式。
set x {john anne mary jim}
lsearch $x mary
=>2
lsearch $x phil
=>-1
返回列表中第一个与指定莫斯匹配的元素的索引,如果没有匹配元素返回-1
设定模式匹配方式-exact,-glob,-regexp
lsearch -glob $x a*
=>1
-glob指定匹配安装string match命令规则进行
-regexp指定匹配按照正则规则记性
-exact 要求进行严格匹配
如果没有指定匹配方式,那么默认设置为-glob,还可以用-not 选项对匹配结果取反。
-all要求将所有匹配的元素组成一个列表返回
set states {california hawaii iowa maine vermont}
lsearch -all $states *a
=>0 2
-inline 指定返回元素,而非元素索引
lsearch -all -inline $states *ai*
=>hawaii maine
如果要探测一个确切的字符串是否是列表中的一个元素,可以在表达式中分别使用in和ni操作符。
可以设置很多控制选项排序
2.lsort
命令获取一个列表作为参数。返回有系统元素的列表,但新列表中的元素已经按字典顺序排序了
lsort {john anne mary jim}
=>anne jim john mary
-decreasing 将最大的元素放在最前面
-integer -real指定列表的元素应该被视为整数或实数
-dictionary指定不区分大小写的排序,并且元素中嵌入的数字都作为非负整数处理
-unique返回的结果中,原列表中重复出现的元素只出现一次
lsort -decreasing { b a c}
=>a b c
lsort {10 1 2}
=> 1 10 2
lsort -integer {10 1 2}
=> 1 2 10
lsort { Peach banana Apple pear}
=>Apple Peach banana pear
lsort -dictionary {Peach banana Apple pear}
=>Apple banana Peach pear
lsort -unique { c a b q a z q}
=> a b c q z
-index选项如下指定子裂中元素的索引,根据指定的元素对子列表进行排序
lsort -integer -index 1 {{first 24} {second 18} {third 30}}
=>{second 18} {first 24} {third 30}
如果列表包含了不能进行字词排序或数学排序的数据,可以使用-command选项定义自己的排序函数