Уроки Tcl

Начало Уроки Tk Файлы
Статьи Уроки Tcl Гостевая книга
Предыдущий урок - #13: Область видимости переменных - global и upvar

#14: Cписковые структуры данных - list

Список - это основная структура данных в Tcl. Список - просто упорядоченная последовательность слов, чисел, строк, и т.д. Каждый элемент списка интерпретируется как одно целое, даже если состоит из нескольких слов или строк текста. Например, команда в Tcl является списком, в котором первый элемент имя команды, а остальные элементы - аргументы.

Элементы списка разделены пробелами. Если элемент содержит внутри пробелы, то его следует заключить в фигурные скобки. Пустой элемент списка определяется парой скобок без промежутка между ними ({}).

Список может быть создан разыми способами:

Элемент списка может быть получен с помощью команды lindex.

Краткое описание этих команд следующее:

list ?арг1 арг2 ... ?
  Создаёт список аргументов
split строка ?разделитель?
  Разделяет строку на элементы списка по символу разделитель. Разделителем по умолчанию является пробел. Помните, что если разделитель задан несколькими символами, то каждый из них будет делить строку на элементы списка. Если два разделителя идут подряд, то будет создан пустой элемент списка. Например:
split "1234567" "36"
возвратит список состоящий из {12 45 7}
lindex список индекс
  Возвращяет элемент списка на позиции индекс. Нумерация начинается с 0,последний элемент можно указывать индексом end.
llength список
  Возвращает количество элементов в списке.

Элементы списка могут быть перебраны с помощью команды foreach.

foreach имяПерем список команда

Foreach выполняет код команды по разу для каждого элемента списка. Каждый раз переменная имяПерем будет содержать значение соответствующего элемента списка.

Конструкции с foreach из примера будет соответствовать следующий код. Посмотрите насколько эффективнее использовать foreach при работе со списками.

for {set i 0} {$i < [llength $x]} {incr i} {
	puts "[lindex $x $i] элемент номер $i списка x"
}

Команда foreach выполняется в два раза быстрее, чем for в этом примере. Это хорошая причина, чтобы когда возможно использовать цикл foreach вместо for.

Даже хотя вы можете создавать список просто записывая в переменную строку слов, лучше использовать команду list чтобы иметь уверенность в том, что элементы сгруппированы именно так, как вам нужно.

Пример:

set x "а б в"
puts "Элемент 2 списка {$x} это: [lindex $x 2]\n"

set y [split 9/30/2001 "/"]
puts "Мы празднуем [lindex $y 1]-й день [lindex $y 0]-го месяца\n"

set i 0;
foreach j $x {
	puts "$j элемент номер $i списка x"
	incr i;
}

Следующий урок - #15: Добавление и удаление элементов списка
Горбачев "Yurez" Юрий  
Хостинг от uCoz