lsort -
給一個列表的元素排序
lsort ?
options?
list
這個命令給
list
的元素排序,返回按整理後的次序(排列)的一個新列表。
lsort
命令的實現使用了歸併排序演算法,這個演算法有
O(n log n)
效能特徵的一個穩定的排序演算法。
預設的使用 ASCII
排序,並按升序返回結果。但是,可以在
list
的前面指定任何下列引數來控制排序處理(接受唯一性的縮寫):
- -ascii
- 字串比較使用 ASCII
(作為)整理(collation)次序。這是預設的。
- -dictionary
- 使用字典式樣的比較。除了下列兩點之外它同於
-ascii。(a) 除了作為一個
tie-breaker 之外忽略大寫,(b)
如果字串包含嵌入的數字,數字作為整數來比較而不是字元。例如,在
-dictionary 模式下,bigBoy
排序在 bigbang 和 bigboy
之間,而 x10y 排序在
x9y 和 x11y 之間。
- -integer
- 把列表元素轉換成整數並使用整數比較。
- -real
- 把列表元素轉換成浮點值並使用浮點比較。
-
-command command
- 使用 command
作為一個比較命令。想比較兩個元素,要求由
command 構成的一個 Tcl
指令碼的值,並加上兩個元素作為(向這個過程)附加的引數。如果第一個引數被認定為小於、等於、或大於第二個引數,這個指令碼應該分別返回小於、等於、或大於零的一個整數。
- -increasing
- 按升序整理這個列表(“最小”
的專案在最先)。這是預設的。
- -decreasing
- 按降序整理這個列表(“最大”
的專案在最先)。
-
-index index
- 如果指定了這個選項,list
的每個元素自身必須是一個正確的
Tcl
子列表。不是基於整個子列表來排序,
lsort
將從每個子列表中提取第
index
個元素並基於這個給定的元素來排序。
index 允許使用關鍵字
end
來在子列表的最後的元素上排序,
而 end-index sorts on a sublist element offset from
the end 。例如,
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}}
返回
{c 4 5 6 d h} {a 1 e i} {b 2 3 f g}.
這個選項比使用
-command
來完成同樣的功能要更加高效。
- -unique
- 如果指定了這個選項,則保留在這個列表中找到的重複的(duplicate)元素的最後一組。注意重複是相對於在排序中使用的比較來決定的。所以如果使用了
-index 0 ,{1 a} 和 {1 b}
將被認為是重複的並只保留第二個元素
{1 b}。
The options to
lsort only control what sort of comparison is used, and do
not necessarily constrain what the values themselves actually are. This
distinction is only noticeable when the list to be sorted has fewer than two
elements.
The
lsort command is reentrant, meaning it is safe to use as part of the
implementation of a command used in the
-command option.
Sorting a list using ASCII sorting:
% lsort {a10 B2 b1 a1 a2}
B2 a1 a10 a2 b1
Sorting a list using Dictionary sorting:
% lsort -dictionary {a10 B2 b1 a1 a2}
a1 a2 a10 b1 B2
Sorting lists of integers:
% lsort -integer {5 3 1 2 11 4}
1 2 3 4 5 11
% lsort -integer {1 2 0x5 7 0 4 -1}
-1 0 1 2 4 0x5 7
Sorting lists of floating-point numbers:
% 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
Sorting using indices:
% # Note the space character before the c
% lsort {{a 5} { c 3} {b 4} {e 1} {d 2}}
{ c 3} {a 5} {b 4} {d 2} {e 1}
% lsort -index 0 {{a 5} { c 3} {b 4} {e 1} {d 2}}
{a 5} {b 4} { c 3} {d 2} {e 1}
% lsort -index 1 {{a 5} { c 3} {b 4} {e 1} {d 2}}
{e 1} {d 2} { c 3} {b 4} {a 5}
Stripping duplicate values using sorting:
% lsort -unique {a b c a b c a b c}
a b c
More complex sorting using a comparison function:
% proc compare {a b} {
set a0 [lindex $a 0]
set b0 [lindex $b 0]
if {$a0 < $b0} {
return -1
} elseif {$a0 > $b0} {
return 1
}
return [string compare [lindex $a 1] [lindex $b 1]]
}
% lsort -command compare \
{{3 apple} {0x2 carrot} {1 dingo} {2 banana}}
{1 dingo} {2 banana} {0x2 carrot} {3 apple}
lappend(n),
lindex(n),
linsert(n),
list(n),
llength(n),
lrange(n),
lreplace(n),
lsearch(n)
element, list, order, sort
寒蟬退士
2001/09/06
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh