在给定列表中使用正则表达式匹配升序和降序。
set a {35214}
根据在场状态的顺序,我想知道它是升序还是降序。
12345
→升序
54321
→降序
答案 0 :(得分:2)
第二次尝试......(见第一次尝试的底部)
对数字序列进行排序:
set a 35214
# ascending order:
join [lsort -integer [split $a {}]] {}
# -> 12345
# descending order:
join [lsort -integer -decreasing [split $a {}]] {}
# -> 54321
正如您所想, {12345}
不是数字列表,而是包含五位数的字符串。这些数字的列表可以写为文字{1 2 3 4 5}
或"1 2 3 4 5"
(括号或引号是告诉解释器我们希望这是一个列表值而不是五个值),或者作为表达式list 1 2 3 4 5
。
按升序排序数字或整数值列表:
set a {3 5 2 1 4}
lsort -integer $a
# -> 1 2 3 4 5
如果值以字符串形式打包,则需要将其拆分:
set a 35214
lsort -integer [split $a {}]
# -> 1 2 3 4 5
如果您希望排序结果为打包字符串:
set a 35214
join [lsort -integer [split $a {}]] {}
# -> 12345
按降序排序:
set a 35214
join [lsort -integer -decreasing [split $a {}]] {}
# -> 54321
<小时/> 我第一次尝试获得+1,所以我不想完全放弃它,但OTOH似乎远不及提问者所希望的。您可以找到经过轻微编辑的答案on my personal blog。