Понедельник
25.11.2024, 17:29
Projects botx in RusNet
Приветствую Вас Гость | RSS
Главная Работа со списками - Форум Регистрация Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Работа со списками
PeoneErДата: Вторник, 25.09.2007, 23:19 | Сообщение # 1
Ботовод
Группа: Администраторы
Сообщений: 10
Репутация: 0
Статус: Offline
Расскажу немного о работе со списками.
Список - это массив элементов, нумерация в списке начинается с нуля.

[center]СОЗДАНИЕ СПИСКА[/center]
Задать список просто:

Code
set list {"элемент 1" "элемент 2" "элемент 3"}

либо
Code
set list [list "элемент 1" "элемент 2" "элемент 3"]

Это создает список list с тремя элементами. Длинна списка будет равна 3. Первый элемент списка имеет индекс 0, второй - 1, третий - 2. Так же последний элемент списка имеет индекс end(см. ниже).
llength <список> - процедура возвращает длинну списка.
Code
putlog [llength $list]

В результате, в патилайне выведется 3.

[center]ВЫБОРКА ДАННЫХ[/center]
lindex <список> <элемент> - это процедура позволяет выбирать нужный нам элемент из списка:

Code
putlog [lindex $list 0]

В патилайн выведет "элемент 1" (без кавычек). В процедуру lindex передается список, из которого мы выбираем элемент ( в нашем случае - $list ) и номер элемента. Напомню, что нумерация начинается с нуля. Выбрать последний элемент списка ( в нашем случае он имеет индекс 2 ), можно передав в процедуру слово "end" (без кавычек).
Code
putlog [lindex $list end]

В результате мы получим "элемент 3".

lrange <список> <первый элемент> <последний элемент> - процедура позволяет выбрать диапазон элементов из списка ( от первого до последнего элемента ).

Code
putlog [lrange $list 1 end]

В результате мы получим новый список из 2х элементов списка $list - "элемент 2" и "элемент 3". В нашем случае 1 - начальный элемент, end - последний элемент списка.

[center]ПОИСК ПО СПИСКУ[/center]
lsearch [ключи] <список> <шаблон> - осуществляет поиск наличия элемента в списке. Возвращает номер первого найденного элемента в списке, если существует элемент, соответствующий шаблону, если нет - возвращает -1. Ключи указывать не обязательно, по умолчанию устанавливается ключ -glob. Возможные ключи:
-glob - используются те же правила сравнения элементов с шаблоном, что и в string match
-exact - означает, что элемент списка должен быть в точности равен шаблону
-regexp - шаблон считается регулярным выражением и для сравнения используются те же правила, что и в regexp
Пример 1:

Code
putlog [lsearch $list "*элемент*"]

Ключ установлен по умолчанию в -glob, сравнение осуществляется так же, как и в string match. Под этот шаблон попадают все 3 элемента, но будет выведен только индекс первого из них - 0.
Пример 2:
Code
putlog [lsearch -exact $list "элемент 3"]

Ключ устанавливается в -exact, элемент должен быть в точности равен шаблону. В нашем случае, вернёт индекс 2 (3й элемент списка $list).
Пример 3:
Code
putlog [lsearch $list "element"]

Такого элемента в списке не существует. Возвращаемое значение будет равно -1

[center]ИЗМЕНЕНИЕ И ДОПОЛНЕНИЕ СПИСКА[/center]
linsert <список> <индекс> <элемент1> <элемент2> <элемент3> ... - эта процедура служит для вставки новых элементов в уже имеющийся список. Возвращает новый список. <список> - это список, в который мы вставляем элементы, <индекс> - перед этим индексом будут вставлены все наши элементы(если индекс 0 или меньше - вставляются в начало списка; если равен числу элементов или больше или равен end - вставляется в конец списка; если список из 3х элементов, а индекс равен 1, то все наши элементы будут вставлены между первым и вторым элементами списка), <элемент1> и т.п. - неограниченное число элементов, вставляемых в список.
Пример:

Code
set list2 [linsert $list end "элемент 4" "элемент 5"]

В результате наш старый список $list не изменится, а новый список $list2 будет состоять из 5 элементов ("элемент 1" ... "элемент 5").

lappend <список> <элемент1> <элемент2>... - процедура дополняет список элементами, дописывая их в конец. Если списка не существует - она создает новый список из этих элементов.

Code
lappend list3 "a" "b" "c"

Если список $list3 не существует - он будет создан. Если существует - три этих элемента будут дописаны в конец списка. Обратите внимание - символ $ перед list3 в процедуре lappend не нужен.

Процедура lsort, позволяющая сортировать список, будет рассмотрена позже.

 
  • Страница 1 из 1
  • 1
Поиск:


Copyright BotX team 2006© 2024