Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
Sorting in Tcl - lists and arrays

Tcl's lsort command lets you sort a list - and that can be a list of the keys of an array. You can't sort the array, but once you have the list of keys you can sort that and use it to iterate through the array in any order that you like.

As everything (except an array) is a string in Tcl, when you sort a list the language defaults to an asciibetic sort - which you can vary with the -integer or -real options to lsort. And if you want to specify another criterion, you can do that too, using the -command option to specify the name of a proc that returns -1, 0 or +1 to indicate the ordering of two input records.

There's examples of all three following - I'm sorting a list of keys from an array asciibetically, numerically, and by the value that the key points to:

proc report {order say} {
  puts $say
  global stop
  foreach pl $order {
    puts "$pl: $stop($pl)"
  }
}
#
proc byp {a b} {
  global stop
  return [string compare $stop($a) $stop($b)]
}
#
set stop(1) Bath
set stop(2) Bristol
set stop(6) Keynsham
set stop(3) Easterton
set stop(4) unused
set stop(5) unused
set stop(10) London
set stop(11) "The West"
#
set bystop [lsort [array names stop]]
set properbystop [lsort -integer [array names stop]]
set byplace [lsort -command byp [array names stop]]
#
report $bystop "By Ascii stop"
report $properbystop "By numeric stop"
report $byplace "By place name"


Here are the results:

earth-wind-and-fire:~/oct07/camb grahamellis$ tclsh allsorts
By Ascii stop
1: Bath
10: London
11: The West
2: Bristol
3: Easterton
4: unused
5: unused
6: Keynsham
By numeric stop
1: Bath
2: Bristol
3: Easterton
4: unused
5: unused
6: Keynsham
10: London
11: The West
By place name
1: Bath
2: Bristol
3: Easterton
6: Keynsham
10: London
11: The West
4: unused
5: unused
earth-wind-and-fire:~/oct07/camb grahamellis$

(written 2007-10-24, updated 2007-10-25)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
T206 - Tcl/Tk - Lists
  [4455] Working out distance between places, using OS grid references and a program in Tcl - (2015-03-11)
  [4454] Everything is a string - even a list - (2015-03-11)
  [4209] Lists in Tcl - fundamentals in a commented source code example - (2013-11-16)
  [3618] lists and struct::list in Tcl - Introduction to struct::list and examples - (2012-02-18)
  [3583] Expanding a list of parameters in Tcl - {*} and eval - (2012-01-17)
  [3582] Tcl collections - lists, dicts and array - (2012-01-16)
  [3415] User defined sorting and other uses of callbacks in Tcl and Tk - (2011-09-02)
  [3394] The difference between lists and strings - Tcl - (2011-08-16)
  [3285] Extracting data from a string / line from file - Tcl - (2011-05-10)
  [2472] split and join in tcl and expect - (2009-10-23)
  [2468] What are Tcl lists? - (2009-10-22)
  [1601] Replacing the last comma with an and - (2008-04-04)
  [1402] Tcl - append v lappend v concat - (2007-10-23)
  [1334] Stable sorting - Tcl, Perl and others - (2007-09-06)
  [1283] Generating traffic for network testing - (2007-07-29)
  [1282] Stringing together Tcl scripts - (2007-07-29)
  [781] Tcl - lappend v concat - (2006-06-27)
  [463] Splitting the difference - (2005-10-13)
  [144] Tcl sandwich - lists in Tcl - (2004-12-08)

T208 - Tcl/Tk - Arrays and dicts
  [3638] Sorting dicts and arrays in Tcl - (2012-03-04)
  [3614] Tcl - dicts - a tutorial and examples - (2012-02-14)
  [3192] Tcl - Some example of HOW TO in handling data files and formats - (2011-03-04)
  [2466] Tcl - passing arrays and strings in and back out of procs - (2009-10-22)
  [1614] When an array is not an array - (2008-04-17)
  [1427] Arrays in Tcl - a demonstration - (2007-11-10)
  [779] The fragility of pancakes - and better structures - (2006-06-26)
  [122] Passing arrays to procs in Tcl - (2004-11-18)


Back to
Tcl - global, upvar and uplevel.
Previous and next
or
Horse's mouth home
Forward to
Away or home - which do I prefer?
Some other Articles
What is Expect?
Wireless hotel tips - FTP and Skype connections failing
Reading from another process in Tcl (pipes and sockets)
Away or home - which do I prefer?
Sorting in Tcl - lists and arrays
Tcl - global, upvar and uplevel.
Square Bracket protection in Tcl
Tcl - using [] or {} for conditions in an if (and while)
Dark Dawn
4725 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2017: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 793803 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/1405_Sor ... rrays.html • PAGE BUILT: Sat Jun 11 12:16:26 2016 • BUILD SYSTEM: WomanWithCat