lsort.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
- '"
- '" Copyright (c) 1993 The Regents of the University of California.
- '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
- '" Copyright (c) 1999 Scriptics Corporation
- '" Copyright (c) 2001 Kevin B. Kenny. All rights reserved.
- '"
- '" See the file "license.terms" for information on usage and redistribution
- '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- '"
- '" RCS: @(#) $Id: lsort.n,v 1.12.4.2 2004/10/27 12:52:40 dkf Exp $
- '"
- .so man.macros
- .TH lsort n 8.3 Tcl "Tcl Built-In Commands"
- .BS
- '" Note: do not modify the .SH NAME line immediately below!
- .SH NAME
- lsort - Sort the elements of a list
- .SH SYNOPSIS
- fBlsort fR?fIoptionsfR? fIlistfR
- .BE
- .SH DESCRIPTION
- .PP
- This command sorts the elements of fIlistfR, returning a new
- list in sorted order. The implementation of the fBlsortfR command
- uses the merge-sort algorithm which is a stable sort that has O(n log
- n) performance characteristics.
- .PP
- By default ASCII sorting is used with the result returned in
- increasing order. However, any of the following options may be
- specified before fIlistfR to control the sorting process (unique
- abbreviations are accepted):
- .TP 20
- fB-asciifR
- Use string comparison with Unicode code-point collation order (the
- name is for backward-compatibility reasons.) This is the default.
- .TP 20
- fB-dictionaryfR
- Use dictionary-style comparison. This is the same as fB-asciifR
- except (a) case is ignored except as a tie-breaker and (b) if two
- strings contain embedded numbers, the numbers compare as integers,
- not characters. For example, in fB-dictionaryfR mode, fBbigBoyfR
- sorts between fBbigbangfR and fBbigboyfR, and fBx10yfR
- sorts between fBx9yfR and fBx11yfR.
- .TP 20
- fB-integerfR
- Convert list elements to integers and use integer comparison.
- .TP 20
- fB-realfR
- Convert list elements to floating-point values and use floating comparison.
- .TP 20
- fB-command fIcommandfR
- Use fIcommandfR as a comparison command.
- To compare two elements, evaluate a Tcl script consisting of
- fIcommandfR with the two elements appended as additional
- arguments. The script should return an integer less than,
- equal to, or greater than zero if the first element is to
- be considered less than, equal to, or greater than the second,
- respectively.
- .TP 20
- fB-increasingfR
- Sort the list in increasing order (``smallest'' items first).
- This is the default.
- .TP 20
- fB-decreasingfR
- Sort the list in decreasing order (``largest'' items first).
- .TP 20
- fB-index fIindexfR
- If this option is specified, each of the elements of fIlistfR must
- itself be a proper Tcl sublist. Instead of sorting based on whole
- sublists, fBlsortfR will extract the fIindexfR'th element from
- each sublist and sort based on the given element. The keyword
- fBendfP is allowed for the fIindexfP to sort on the last sublist
- element,
- .VS 8.4
- and fBend-fIindexfR sorts on a sublist element offset from
- the end.
- .VE
- For example,
- .RS
- .CS
- lsort -integer -index 1 {{First 24} {Second 18} {Third 30}}
- .CE
- returns fB{Second 18} {First 24} {Third 30}fR, and
- .VS 8.4
- '"
- '" This example is from the test suite!
- '"
- .CS
- lsort -index end-1 {{a 1 e i} {b 2 3 f g} {c 4 5 6 d h}}
- .CE
- returns fB{c 4 5 6 d h} {a 1 e i} {b 2 3 f g}fR.
- .VE
- This option is much more efficient than using fB-commandfR
- to achieve the same effect.
- .RE
- .TP 20
- fB-uniquefR
- If this option is specified, then only the last set of duplicate
- elements found in the list will be retained. Note that duplicates are
- determined relative to the comparison used in the sort. Thus if
- fI-index 0fR is used, fB{1 a}fR and fB{1 b}fR would be
- considered duplicates and only the second element, fB{1 b}fR, would
- be retained.
- .SH "NOTES"
- .PP
- The options to fBlsortfR 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.
- .PP
- The fBlsortfR command is reentrant, meaning it is safe to use as
- part of the implementation of a command used in the fB-commandfR
- option.
- .SH "EXAMPLES"
- .PP
- Sorting a list using ASCII sorting:
- .CS
- % fBlsortfR {a10 B2 b1 a1 a2}
- B2 a1 a10 a2 b1
- .CE
- .PP
- Sorting a list using Dictionary sorting:
- .CS
- % fBlsortfR -dictionary {a10 B2 b1 a1 a2}
- a1 a2 a10 b1 B2
- .CE
- .PP
- Sorting lists of integers:
- .CS
- % fBlsortfR -integer {5 3 1 2 11 4}
- 1 2 3 4 5 11
- % fBlsortfR -integer {1 2 0x5 7 0 4 -1}
- -1 0 1 2 4 0x5 7
- .CE
- .PP
- Sorting lists of floating-point numbers:
- .CS
- % fBlsortfR -real {5 3 1 2 11 4}
- 1 2 3 4 5 11
- % fBlsortfR -real {.5 0.07e1 0.4 6e-1}
- 0.4 .5 6e-1 0.07e1
- .CE
- .PP
- Sorting using indices:
- .CS
- % # Note the space character before the c
- % fBlsortfR {{a 5} { c 3} {b 4} {e 1} {d 2}}
- { c 3} {a 5} {b 4} {d 2} {e 1}
- % fBlsortfR -index 0 {{a 5} { c 3} {b 4} {e 1} {d 2}}
- {a 5} {b 4} { c 3} {d 2} {e 1}
- % fBlsortfR -index 1 {{a 5} { c 3} {b 4} {e 1} {d 2}}
- {e 1} {d 2} { c 3} {b 4} {a 5}
- .CE
- .PP
- Stripping duplicate values using sorting:
- .CS
- % fBlsortfR -unique {a b c a b c a b c}
- a b c
- .CE
- .PP
- More complex sorting using a comparison function:
- .CS
- % 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]]
- }
- % fBlsortfR -command compare \
- {{3 apple} {0x2 carrot} {1 dingo} {2 banana}}
- {1 dingo} {2 banana} {0x2 carrot} {3 apple}
- .CE
- .SH "SEE ALSO"
- .VS 8.4
- list(n), lappend(n), lindex(n), linsert(n), llength(n), lsearch(n),
- lset(n), lrange(n), lreplace(n)
- .VE
- .SH KEYWORDS
- element, list, order, sort