我在这样的存储库文件夹中捕获图片列表:
foreach image [lsort [glob -nocomplain -directory $image_path -type f *]] {
puts $image
}
由于lsort
,所有图像重新归类,但有一些图像根本没有被归类,我无法弄清原因。
从文件夹返回的顺序为:
Repository/Unsorted/3.jpg
Repository/Unsorted/30.jpg
Repository/Unsorted/33.jpg
Repository/Unsorted/6.jpg
Repository/Unsorted/9.jpg
预期:
Repository/Unsorted/3.jpg
Repository/Unsorted/6.jpg
Repository/Unsorted/9.jpg
Repository/Unsorted/30.jpg
Repository/Unsorted/33.jpg
更新:
当我使用-dictionary
开关时,它将返回正确的顺序。有人可以详细说明为什么吗?
foreach image [lsort -dictionary [glob -nocomplain -directory $image_path -type f *]] {
puts $image
}
答案 0 :(得分:0)
lsort
命令有几种方法可以确定元素的顺序。
-ascii
(由于各种原因而为默认模式,略有误名)仅使用两个字符串中每对字符的数字顺序,即字符串中的字符顺序。如果使用C strcmp()
,这就是您所期望的……如果那是Unicode感知的。
-dictionary
是相同的……除了字符串中的数字顺序(因此,字符0
至9
; 不是 {{1 }},因此不会将任何负数作为数字进行比较。这样给出的排序感觉更像是字典中的排序;它专门用于在Tk的文件选择对话框中产生令人愉悦的文件名顺序。
,为完整起见,-
和-integer
将字符串分别解析为整数和浮点数,然后对其进行排序,而-real
可让您提供自己的排序命令(速度较慢,但完全可以控制)。
Tcl知道按什么顺序对值进行排序的唯一原因是因为您告诉了它。
因此,在比较-command
和Repository/Unsorted/3.jpg
时,在Repository/Unsorted/30.jpg
模式下,-ascii
(Unicode U + 00002E)在.
(Unicode U + 000030)之前),而在0
模式下,-dictionary
和3
数字序列被解析为整数并以这种方式进行比较(因为之前的非数字部分是相同的)。