Tcl Tutorial Lesson 16

Difference between version 2 and 3 - Previous - Next

**More list commands - lsearch, lsort, lrange**


!!!!!!
'''[Tcl Tutorial Lesson 15%|%Previous lesson%|%]''' | '''[Tcl Tutorial Index%|%Index%|%]''' | '''[Tcl Tutorial Lesson 16a%|%Next lesson%|%]'''
!!!!!!



Lists can be searched with the `lsearch` command, sorted with the `lsort` command, and a range of list entries can be extracted with the `lrange` command.

    `lsearch ?options? list pattern`:    Searches `list` for an entry that matches `pattern`, and returns the index for the first match, or a -1 if there is no match.  By default, `lsearch` uses "glob" patterns for matching.  See the section on [Tcl Tutorial Lesson 16a%|%Simple pattern matching - "globbing"%|%]
    `lsort ?options? list`:    Sorts `list` and returns a new list in the sorted order.  By default, it sorts the list into alphabetic order.  Note that this command returns the sorted list as a result, instead of sorting the list in place.  If you have a list in a variable, the way to sort it is like so: `set lst [[lsort $lst]]`

    `lrange list first last`:    Returns a list composed of the `first` through `last` entries in the list.  If `first` is less than or equal to 0, it is treated as the first list element.  If `last` is `end` or a value greater than the number of elements in the list, it is treated as the end. If `first` is greater than `last` then an empty list is returned.

While the options are not discussed here, they make these commands very powerful.


----

***Example***

======
set list [list {Washington 1789} {Adams 1797} {Jefferson 1801} \
               {Madison 1809} {Monroe 1817} {Adams 1825} ]

set x [lsearch $list Washington*]
set y [lsearch $list Madison*]
incr x
incr y -1                        ;# Set range to be not-inclusive

set subsetlist [lrange $list $x $y]

puts "These presidents served between Washington and Madison"
foreach item $subsetlist {
    puts "Starting in [lindex $item 1]: President [lindex $item 0]"
}

set x [lsearch $list Madison*]

set srtlist [lsort $list]
set y [lsearch $srtlist Madison*]

puts "\n$x Presidents came before Madison chronologically"
puts "$y Presidents came before Madison alphabetically"
======

<<discussion>> Resulting output
======none
These presidents served between Washington and Madison
Starting in 1797: President Adams
Starting in 1801: President Jefferson

3 Presidents came before Madison chronologically
3 Presidents came before Madison alphabetically
======
<<enddiscussion>>

!!!!!!
'''[Tcl Tutorial Lesson 15%|%Previous lesson%|%]''' | '''[Tcl Tutorial Index%|%Index%|%]''' | '''[Tcl Tutorial Lesson 16a%|%Next lesson%|%]'''
!!!!!!