lsort.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1993 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '" Copyright (c) 1999 Scriptics Corporation
  5. '" Copyright (c) 2001 Kevin B. Kenny.  All rights reserved.
  6. '"
  7. '" See the file "license.terms" for information on usage and redistribution
  8. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9. '" 
  10. '" RCS: @(#) $Id: lsort.n,v 1.12.4.2 2004/10/27 12:52:40 dkf Exp $
  11. '" 
  12. .so man.macros
  13. .TH lsort n 8.3 Tcl "Tcl Built-In Commands"
  14. .BS
  15. '" Note:  do not modify the .SH NAME line immediately below!
  16. .SH NAME
  17. lsort - Sort the elements of a list
  18. .SH SYNOPSIS
  19. fBlsort fR?fIoptionsfR? fIlistfR
  20. .BE
  21. .SH DESCRIPTION
  22. .PP
  23. This command sorts the elements of fIlistfR, returning a new
  24. list in sorted order.  The implementation of the fBlsortfR command
  25. uses the merge-sort algorithm which is a stable sort that has O(n log
  26. n) performance characteristics.
  27. .PP
  28. By default ASCII sorting is used with the result returned in
  29. increasing order.  However, any of the following options may be
  30. specified before fIlistfR to control the sorting process (unique
  31. abbreviations are accepted):
  32. .TP 20
  33. fB-asciifR
  34. Use string comparison with Unicode code-point collation order (the
  35. name is for backward-compatibility reasons.)  This is the default.
  36. .TP 20
  37. fB-dictionaryfR
  38. Use dictionary-style comparison.  This is the same as fB-asciifR
  39. except (a) case is ignored except as a tie-breaker and (b) if two
  40. strings contain embedded numbers, the numbers compare as integers,
  41. not characters.  For example, in fB-dictionaryfR mode, fBbigBoyfR
  42. sorts between fBbigbangfR and fBbigboyfR, and fBx10yfR
  43. sorts between fBx9yfR and fBx11yfR.
  44. .TP 20
  45. fB-integerfR
  46. Convert list elements to integers and use integer comparison.
  47. .TP 20
  48. fB-realfR
  49. Convert list elements to floating-point values and use floating comparison.
  50. .TP 20
  51. fB-commandfIcommandfR
  52. Use fIcommandfR as a comparison command.
  53. To compare two elements, evaluate a Tcl script consisting of
  54. fIcommandfR with the two elements appended as additional
  55. arguments.  The script should return an integer less than,
  56. equal to, or greater than zero if the first element is to
  57. be considered less than, equal to, or greater than the second,
  58. respectively.
  59. .TP 20
  60. fB-increasingfR
  61. Sort the list in increasing order (``smallest'' items first).
  62. This is the default.
  63. .TP 20
  64. fB-decreasingfR
  65. Sort the list in decreasing order (``largest'' items first).
  66. .TP 20
  67. fB-indexfIindexfR
  68. If this option is specified, each of the elements of fIlistfR must
  69. itself be a proper Tcl sublist.  Instead of sorting based on whole
  70. sublists, fBlsortfR will extract the fIindexfR'th element from
  71. each sublist and sort based on the given element.  The keyword
  72. fBendfP is allowed for the fIindexfP to sort on the last sublist
  73. element,
  74. .VS 8.4
  75. and fBend-fIindexfR sorts on a sublist element offset from
  76. the end.
  77. .VE
  78. For example,
  79. .RS
  80. .CS
  81. lsort -integer -index 1 {{First 24} {Second 18} {Third 30}}
  82. .CE
  83. returns fB{Second 18} {First 24} {Third 30}fR, and
  84. .VS 8.4
  85. '"
  86. '" This example is from the test suite!
  87. '"
  88. .CS
  89. lsort -index end-1 {{a 1 e i} {b 2 3 f g} {c 4 5 6 d h}}
  90. .CE
  91. returns fB{c 4 5 6 d h} {a 1 e i} {b 2 3 f g}fR.
  92. .VE
  93. This option is much more efficient than using fB-commandfR
  94. to achieve the same effect.
  95. .RE
  96. .TP 20
  97. fB-uniquefR
  98. If this option is specified, then only the last set of duplicate
  99. elements found in the list will be retained.  Note that duplicates are
  100. determined relative to the comparison used in the sort.  Thus if 
  101. fI-index 0fR is used, fB{1 a}fR and fB{1 b}fR would be
  102. considered duplicates and only the second element, fB{1 b}fR, would
  103. be retained.
  104. .SH "NOTES"
  105. .PP
  106. The options to fBlsortfR only control what sort of comparison is
  107. used, and do not necessarily constrain what the values themselves
  108. actually are.  This distinction is only noticeable when the list to be
  109. sorted has fewer than two elements.
  110. .PP
  111. The fBlsortfR command is reentrant, meaning it is safe to use as
  112. part of the implementation of a command used in the fB-commandfR
  113. option.
  114. .SH "EXAMPLES"
  115. .PP
  116. Sorting a list using ASCII sorting:
  117. .CS
  118. % fBlsortfR {a10 B2 b1 a1 a2}
  119. B2 a1 a10 a2 b1
  120. .CE
  121. .PP
  122. Sorting a list using Dictionary sorting:
  123. .CS
  124. % fBlsortfR -dictionary {a10 B2 b1 a1 a2}
  125. a1 a2 a10 b1 B2
  126. .CE
  127. .PP
  128. Sorting lists of integers:
  129. .CS
  130. % fBlsortfR -integer {5 3 1 2 11 4}
  131. 1 2 3 4 5 11
  132. % fBlsortfR -integer {1 2 0x5 7 0 4 -1}
  133. -1 0 1 2 4 0x5 7
  134. .CE
  135. .PP
  136. Sorting lists of floating-point numbers:
  137. .CS
  138. % fBlsortfR -real {5 3 1 2 11 4}
  139. 1 2 3 4 5 11
  140. % fBlsortfR -real {.5 0.07e1 0.4 6e-1}
  141. 0.4 .5 6e-1 0.07e1
  142. .CE
  143. .PP
  144. Sorting using indices:
  145. .CS
  146. % # Note the space character before the c
  147. % fBlsortfR {{a 5} { c 3} {b 4} {e 1} {d 2}}
  148. { c 3} {a 5} {b 4} {d 2} {e 1}
  149. % fBlsortfR -index 0 {{a 5} { c 3} {b 4} {e 1} {d 2}}
  150. {a 5} {b 4} { c 3} {d 2} {e 1}
  151. % fBlsortfR -index 1 {{a 5} { c 3} {b 4} {e 1} {d 2}}
  152. {e 1} {d 2} { c 3} {b 4} {a 5}
  153. .CE
  154. .PP
  155. Stripping duplicate values using sorting:
  156. .CS
  157. % fBlsortfR -unique {a b c a b c a b c}
  158. a b c
  159. .CE
  160. .PP
  161. More complex sorting using a comparison function:
  162. .CS
  163. % proc compare {a b} {
  164.     set a0 [lindex $a 0]
  165.     set b0 [lindex $b 0]
  166.     if {$a0 < $b0} {
  167.         return -1
  168.     } elseif {$a0 > $b0} {
  169.         return 1
  170.     }
  171.     return [string compare [lindex $a 1] [lindex $b 1]]
  172. }
  173. % fBlsortfR -command compare \
  174.         {{3 apple} {0x2 carrot} {1 dingo} {2 banana}}
  175. {1 dingo} {2 banana} {0x2 carrot} {3 apple}
  176. .CE
  177. .SH "SEE ALSO"
  178. .VS 8.4
  179. list(n), lappend(n), lindex(n), linsert(n), llength(n), lsearch(n), 
  180. lset(n), lrange(n), lreplace(n)
  181. .VE
  182. .SH KEYWORDS
  183. element, list, order, sort