Уроки Tcl
#16: Дополнительные команды работы со списком - lsearch, lsort, lrange |
Есть несколько операций, которые могут быть выполнены на списке:
lsearch список образец | |
Ищет в списке элементы, соответствующие образцу, и возвращает индекс, или -1 если ничего не найдено. | |
lsort список | |
Сортирует список и возвращает отсортированный. По умолчанию сортировка происходит в алфавитном порядке. | |
lrange cписок первый последний | |
Возвращает список состоящий из элементов с первого до последнего. Если первый индекс меньше или равен нулю, то берётся первый элемент. Если последний индекс равен end или значение больше, чем число элементов, то это интерпретируется как последний. Если первый индекс больше последнего, то возвращается пустая строка. |
Обычно lsearch использует метод globbing для поиска. Globbing - система шаблонов, аналогичная используемой в файловой системе. Шаблоны globbing бывают следующими:
* | Соответствует любому количеству символов. lsearch $list a* возвратит номер первого элемента списка, который начинается с буквы 'a', независимо от следующих. |
? | Соответствует любому символу lsearch $list a? возвратит индекс первого элемента списка, который начинается с буквы 'a', и имеет только один символ после 'a'. |
\X | Обратная дробь отменяет действие специального символа,
так же как и при подстановке в Tcl. Использование обратной дроби позволяет
искать символы '*' и '?'. lsearch $list a\* возвратит номер элемента списка равного "a*". |
[...] | Соответствует любому символу,
из перечисленных в квадратных скобках. Например, [А-Я] соответствует любой
заглавной букве. lsearch $list [0-9]* возвратит номер первого элемента, начинающегося с цифры. |
Выполните пример, попробуйте убрать символ * в команде lsearch, и посмотрите, что получится на выходе.
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 subsetlist [lrange $list $x $y] puts "Между Washington и Madison были следующие президенты:" foreach item $subsetlist { puts "Начинал править в [lindex $item 1]: президент [lindex $item 0] " } set x [lsearch $list Madison*] set srtlist [lsort $list]; set y [lsearch $srtlist Madison*]; puts "\n$x был перед Madison по истории" puts "$y перед Madison по алфавиту" |
Горбачев "Yurez" Юрий |