Sun Java Solaris Communities My SDN Account Join SDN
 
Изучаем язык программирования JavaFX Script

Урок 5: Последовательности

Documentation Distribution Policy  
«Предыдущий 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Следующий »
 
Если в вашей программе есть набор каких-либо элементов, вам будет полезно знать, что такое последовательность. В этом уроке вы научитесь создавать, использовать и сравнивать последовательности. Также вы узнаете как работать с выборкой последовательности, называемой срезом последовательности.
 
Содержание
 
Создание последовательности
Создание последовательностей на основе булевых выражений
Работа с элементами последовательности
Добавление элементов в последовательность
Удаление элементов из последовательности
Обращение элементов последовательности
Сравнение последовательностей
Использование срезов последовательности
 
Создание последовательности

Помимо пяти основных типов данных, в языке JavaFX Script также есть структура данных, которая называется последовательностью. Последовательность - это набор упорядоченных элементов. Эти элементы называются элементами последовательности. Последовательности объявляются с помощью квадратных скобок "[]", а элементы последовательности отделяются друг от друга запятыми.

Одним из способов создания последовательности является явное указание её элементов. Каждый элемент отделяется запятой, а весь набор элементов заключается в квадратные скобки [ и ]. Как, например, показано ниже:

var weekDays = ["Mon","Tue","Wed","Thu","Fri"];
 

В этом примере мы объявили последовательность и присвоили её значение переменной weekDays. Компилятор воспринимает эту последовательность как последовательность объектов типа String. На это указывает тот факт, что все элементы последовательности объявлены как константы типа String. Если бы мы объявили последовательность, состоящую из целых чисел (например, var nums = [1,2,3];), то последовательность была бы автоматически воспринята компилятором как последовательность элементов целочисленного типа.

Также вы можете явно указывать тип создаваемой последовательности. Для этого после переменной, которой присвоена последовательность, укажите тип последовательности и квадратные скобки "[]":

var weekDays: String[] = ["Mon","Tue","Wed","Thu","Fri"];
 
Эта строчка кода указывает компилятору на то, что переменная weekDays содержит последовательность элементов типа String, а не один элемент типа String.

Последовательности также можно объявлять внутри других последовательностей:

var days = [weekDays, ["Sat","Sun"]];
 

В этом случае компилятор автоматически формирует одну последовательность, состоящую из элементов вложенной последовательности:

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
 

Существует также простой способ создания последовательностей, состоящих из цифр. Чтобы создать последовательность чисел от 1 до 100, используйте строчку кода:

var nums = [1..100];
 
Создание последовательностей на основе булевых выражений

В языке JavaFX Script есть возможность создания последовательностей на основе существующих последовательностей с помощью булевых выражений (предикатов). Например, у вас есть последовательность:

var nums = [1,2,3,4,5];
 

Чтобы создать новую последовательность на основе элементов существующей последовательности и содержащей только цифры больше 2-х, используйте следующую строчку кода:

var numsGreaterThanTwo = nums[n | n > 2];
 

Если бы вам пришлось объяснить эту строчку по-русски, это звучало бы следующим образом: выбрать все элементы из последовательности nums, величины которых больше 2-х и присвоить эти элементы последовательности numsGreaterThanTwo. Выражение "величины которых больше 2-х" (выделено жирным шрифтом) является предикатом.

В этой строчке кода:

  1. Новая последовательность содержится в переменной numsGreaterThanTwo.

  2. Часть кода, обозначенная зеленым: nums[n | n > 2]; указывает исходную последовательность, откуда будут взяты элементы и перенесены в новую последовательность. В нашем примере, nums - это название существующей последовательности.

  3. В результате выполнения кода из nums выбираются элементы и возвращается новая последовательность, элементы которой удовлетворяют условию.

  4. Символ "|" служит для выделения переменной "n" от остального кода: nums[n | n > 2];

  5. Часть кода, выделенная зеленым nums[n | n > 2]; - булево выражение. Это выражение определяет критерий выбора элементов при формировании новой последовательности.

Работа с элементам последовательности

Доступ к элементам последовательности осуществляется с помощью нумерованных индексов, значения которых начинаются с 0. Чтобы обратиться к нужному элементу, укажите название последовательности, а также индекс элемента, заключенный в квадратные скобки:

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

println(days[0]);
println(days[1]);
println(days[2]);
println(days[3]);
println(days[4]);
println(days[5]);
println(days[6]);
 

В результате, на экран выведется:

Mon
Tue
Wed
Thu
Fri
Sat
Sun
 

Чтобы определить размер последовательности, используйте оператор sizeof и имя последовательности, размер которой вы хотите узнать:

sizeof days
 

В результате выполнения следующих строчек кода, на экран будет выведена цифра "7":

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
println(sizeof days);
 
Добавление элементов в последовательность

С помощью зарезервированного слова insert можно вставить элемент в последовательность перед каким-либо элементом или после какого-либо элемента.


Примечание: Вообще говоря, последовательность является неизменяемым элементом языка. Когда вы модифицируете последовательность, добавляя или удаляя элементы, создается новая последовательность и переменной последовательности переприсваивается значение. Это создает эффект "модифицирования" исходной последовательности.


Рассмотрим пересоздание последовательности days:

var days = ["Mon"];
 

Сейчас последовательность состоит из одного элемента "Mon".

Мы можем добавить "Tue" в конец последовательности при помощи зарезервированных слов insert и into:

insert "Tue" into days;
 

Таким же образом, мы можем добавить "Fri", "Sat" и "Sun".

insert "Fri" into days;
insert "Sat" into days;
insert "Sun" into days;
 

Теперь последовательность состоит из элементов: "Mon", "Tue", "Fri", "Sat" и "Sun".

Для добавления элемента перед элементом последовательности с заданным индексом, используйте зарезервированные слова insert и before. Не забывайте, что нумерация индексов начинается с 0. Таким образом, в нашей последовательности у элемента "Fri" индекс равен 2. Поэтому мы можем добавить "Thu" перед "Fri":

insert "Thu" before days[2];
 

Теперь в последовательности содержатся следующие элементы: "Mon", "Tue", "Thu", "Fri", "Sat" и "Sun"

Для добавления "Wed" после "Tue", используйте зарезервированные слова insert и after.

insert "wed" after days[1];
 

Теперь в последовательность входят все дни недели: "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" и "Sun".

Удаление элементов из последовательности

С помощью delete и from можно легко удалять элементы из последовательности:

delete "Sun" from days;
 

Теперь в последовательности есть следующие элементы: "Mon", "Tue", "Wed", "Thu", "Fri" и "Sat".

Также вы можете удалить элемент с определенным индексом. Следующая строчка кода удаляет "Mon"из последовательности (заметьте, что "Mon" - первый по счету элемент последовательности, поэтому его индекс равен 0)

delete days[0];
 

Чтобы удалить все элементы последовательности, используйте зарезервированное слово delete и следующее за ним название последовательности, из которой вы хотите удалить элементы:

delete days;
 

Заметьте, что delete удаляет только элементы последовательности и не удаляет переменную days из вашего скрипта. Поэтому даже если вы удалили все элементы days, у вас все-равно есть доступ к этой последовательности и вы можете добавлять в нее новые элементы.

Обращение элементов последовательности

При помощи оператора reverse можно легко обратить последовательность:

var nums = [1...5];
reverse nums; // returns [5, 4, 3, 2, 1]
 
Сравнение последовательностей

Иногда вам может понадобиться определить равны ли последовательности. Последовательности сравниваются на основе их значений: если размер и значения элементов равны, то последовательности равны.

Давайте проверим это, создав 2 последовательности с одинаковым содержимым:

var seq1 = [1,2,3,4,5];
var seq2 = [1,2,3,4,5];
println(seq1 == seq2);
 

Выражение seq1 == seq2 является верным ( true ), потому что у обеих последовательностей одинаковое количество элементов и значения каждого из элементов равны в обеих последовательностях. Поэтому на выходе этой программы будет значение "true"

Добавим в одну из последовательностей один элемент. Размер у последовательностей теперь стал разным:

var seq1 = [1,2,3,4,5];
var seq2 = [1,2,3,4,5,6];
println(seq1 == seq2);
 

Скрипт возвращает значение "false", потому что вторая последовательность длиннее первой, и поэтому они не равны.

Также, если заменить значение элемента в одной из последовательностей, последовательности станут неравными, даже если их размер одинаковый:

var seq1 = [1,2,3,4,5];
var seq2 = [1,3,2,4,5];
println(seq1 == seq2);
 

В результате, на выходе будет "false", потому что последовательности неравны.

Использование срезов последовательностей

Срез последовательности позволяет получить доступ к части последовательности.

seq[a..b]

С помощью синтаксиса указанного выше, вы можете выбрать элементы последовательности, индекс которых попадает в интервал от a до b включительно. Следующий скрипт создает последовательность weekend, состоящей только из элементов "Sat" и "Sun".

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekend = days[5..6];
 

seq[a..<b]

Чтобы выбрать элементы последовательности, индекс которых попадает в интервал от a до b, исключая b, используйте символ "<". В примере ниже мы используем этот синтаксис для создания последовательности weekdays на основе последовательности days. В новую последовательность входят элементы, начиная с "Mon" и заканчивая "Fri".
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekdays = days[0..<5];
 

seq[a..]

Если не указывать правую границу в диапазоне среза последовательности, срез будет состоять из элементов, c индексом, который начинается с a и заканчивая последним элементом включительно. Мы могли бы создать последовательность weekend следующим образом:

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekend = days[5..];
 

seq[a..<]

Вы также можете использовать символ "<" вместо правой границы среза, чтобы получить срез последовательности, содержащей элементы индекс которых начинается с a и заканчивая последним элементом, не включая его.

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var days2 = days[0..<];

Скрипт создаст последовательность days2, состоящую из элементов, начиная с"Mon"и заканчивая "Sat".
« Предыдущий 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Следующий »
 

Оглавление