原创作者: Ivan_Pig
阅读:1942次
评论:1条
更新时间:2011-05-26
Lesson 5: Sequences
目录
- 创建序列
- 使用布尔表达式创建序列
- 访问序列的元素
- 向序列里插入项
- 从序列里删除项
- 倒序序列里的项
- 比较序列
- 使用序列片段
-创建序列
除了5种最基本的数据类型。JavaFX脚本语言还提供了链式数据结构。序列表示一组有序的对象,序列里面的对象称为项。序列以‘[]’定义,每个项之间以逗号隔开。
一种创建序列的方法就是直接列出序列里面的项即可。每一个元素以逗号隔开,且放在[]之间。如下:
声明一个序列然后赋给weekDays变量。编译器知道我们是要创建字符串序列,因为每个项都是定义为字符串类型。 如果序列里面声明的是整数类型(var nums = [1,2,3];)编译器知道我们需要的是整数序列。
你也可以给序列一个特定的类型。
这么定义,告诉编译器weekDays接受一系列的String
序列里面还能定义序列
在这样的情况下,编译器会自动的平坦化序列,即转化为如下形式:
还有一种简短的方法来创建连续的数字。要创建1到100的序列,使用如下方法:
-使用布尔表达式创建序列
你能使用布尔表达式或者断言(predicate)来声明一个已存在的序列的子序列。例如,对于下面的序列:
接着,以第一个序列里面的项为基础,创建第二个序列,此序列只包含大于2的项。创建方法如下:
上面的表达式可以用语言描述为:“从num序列里选出所有大于2的项,然后将这些项赋给numsGreaterThanTwo序列”。("select all items from the num sequence where the value of an item is greater than 2 and assign those items to a new sequence called numsGreaterThanTwo),"where"后面的
"the value of an item is greater than 2"就是断言(predicate)
在这段代码里面:
1. 新创建的序列存放在numsGreaterThanTwo里面。
2. 代码: nums[n | n > 2];指定了源序列。在例子里面,nums就是已经存在的序列。
3. 遍历num里面的所有项,当表达式为true的时候,就返回这个项,由返回的所有项,创建一个新的序列。
4. 符号 "|"是用来分割变量n和后面的代码的。
5. 代码: nums[n | n > 2];定义了一个布尔表达式,它是是否要把原来序列里面的项拷贝到现在的序列里面去的一个衡量标准。
-访问序列元素
序列里的项可以通过下标来访问,从0开始。要访问一个元素,以序列的名字,后面跟"[元素的索引]"即可:
打印如下:
Mon
Tue
Wed
Thu
Fri
Sat
Sun
你还可以使用sizeof操作符后面跟上序列的名字来得到序列的长度:
sizeof days
下面的代码,打印7:
-向Sequence里插入项
insert关键字允许你向序列里的一个特定元素的前面或后面插入一个元素。
Note:事实上,序列是不变的。这意味着序列一旦被创建就不会改变。举个例子,当你插入或删除一项时,在此操作后,会创建一个新的序列并且这个序列会被赋给原来那个变量。
让我们来重新创建days序列,来证明一下:
这里,这个sequence只包含一个元素 "Mon".
我们可以使用insert和into关键字在序列的最后插入"Tue"。
类似的,我们添加 "Fri", "Sat"和"Sun"。
现在序列就包含了: "Mon", "Tue", "Fri", "Sat", and "Sun".
我们还可以使用insert和before关键字在给定的索引所指定的元素前面插入一项。记住,索引以0开始,所以"Fri"的索引是2.所以我们能够像下面这样在"Fri"前面插入"Thu".
现在序列包含了: "Mon", "Tue", "Thu", "Fri", "Sat", and "Sun".
在"Wed"后面插入"Tue",我们能使用insert和after关键字:
现在序列包含了一周的所有天: "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", and "Sun".
-从序列里删除项
delete和from关键字使得从序列里面删除项变得很简单。
现在序列包含:"Mon", "Tue", "Wed", "Thu", "Fri", and "Sat".
你还可以删除一个特定索引的元素。下面的代码将从序列里面删除"Mon"(记住"Mon"是第一个元素,他的索引是0)
要删除序列里的所有项,使用delete跟上序列的名字即可:
注意,delete只是把项从序列里面移走;它不会删除days这个变量。你还能够访问days变量,并向里面添加值。
-倒序序列里的项
你可以使用reverse操作符来倒序序列:
-比较序列
有时你可能会要比较序列是否相等。序列是按值来比较的:如果长度相同,里面的项也相同,那么他们就是相等的。
让我们来测试一下:
表达式seq1 == seq2将为true,因为序列拥有相同个数的项,且每个项的值都相同。所以,这段代码将打印true.
修改其中一个序列的项的个数,他们就不相同了:
这里输出"flase",因为第二个序列比第一个序列长,所以两序列不相等。
我们还能通过修改项的值来使两个序列不相等,即使两个序列的长度仍然相等:
代码将会还是打印"false",因为两个序列不等。
-使用序列片段
序列片段提供访问序列的一部分的功能。
这段语法将访问索引a和索引b之间的所有的元素。下面的脚本创建了一个只包含"Sat"和"Sun"的表示周末的序列。
在索引a和b之间,且靠近b的地方使用"<",将不包含索引b。我们可以用这个创建"Mon" 到"Fri"的表示工作日的序列。
省略第二个索引,你能够访问从索引a到最后的所有项!举同样的例子,我们可以像下面这样创建表示周末的序列:
最后,你能够使用"<"而不需要第二个索引,来访问序列a后面的,除了最后一项之外的所有项。
这里创建一个包含从 "Mon" 到 "Sat"的序列。
目录
- 创建序列
- 使用布尔表达式创建序列
- 访问序列的元素
- 向序列里插入项
- 从序列里删除项
- 倒序序列里的项
- 比较序列
- 使用序列片段
-创建序列
除了5种最基本的数据类型。JavaFX脚本语言还提供了链式数据结构。序列表示一组有序的对象,序列里面的对象称为项。序列以‘[]’定义,每个项之间以逗号隔开。
一种创建序列的方法就是直接列出序列里面的项即可。每一个元素以逗号隔开,且放在[]之间。如下:
var weekDays = ["Mon","Tue","Wed","Thu","Fri"];
声明一个序列然后赋给weekDays变量。编译器知道我们是要创建字符串序列,因为每个项都是定义为字符串类型。 如果序列里面声明的是整数类型(var nums = [1,2,3];)编译器知道我们需要的是整数序列。
你也可以给序列一个特定的类型。
var weekDays: String[] = ["Mon","Tue","Wed","Thu","Fri"];
这么定义,告诉编译器weekDays接受一系列的String
序列里面还能定义序列
var days = [weekDays, ["Sat","Sun"]];
在这样的情况下,编译器会自动的平坦化序列,即转化为如下形式:
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
还有一种简短的方法来创建连续的数字。要创建1到100的序列,使用如下方法:
var nums = [1..100];
-使用布尔表达式创建序列
你能使用布尔表达式或者断言(predicate)来声明一个已存在的序列的子序列。例如,对于下面的序列:
var nums = [1,2,3,4,5];
接着,以第一个序列里面的项为基础,创建第二个序列,此序列只包含大于2的项。创建方法如下:
var numsGreaterThanTwo = nums[n | n > 2];
上面的表达式可以用语言描述为:“从num序列里选出所有大于2的项,然后将这些项赋给numsGreaterThanTwo序列”。("select all items from the num sequence where the value of an item is greater than 2 and assign those items to a new sequence called numsGreaterThanTwo),"where"后面的
"the value of an item is greater than 2"就是断言(predicate)
在这段代码里面:
1. 新创建的序列存放在numsGreaterThanTwo里面。
2. 代码: nums[n | n > 2];指定了源序列。在例子里面,nums就是已经存在的序列。
3. 遍历num里面的所有项,当表达式为true的时候,就返回这个项,由返回的所有项,创建一个新的序列。
4. 符号 "|"是用来分割变量n和后面的代码的。
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);
-向Sequence里插入项
insert关键字允许你向序列里的一个特定元素的前面或后面插入一个元素。
Note:事实上,序列是不变的。这意味着序列一旦被创建就不会改变。举个例子,当你插入或删除一项时,在此操作后,会创建一个新的序列并且这个序列会被赋给原来那个变量。
让我们来重新创建days序列,来证明一下:
var days = ["Mon"];
这里,这个sequence只包含一个元素 "Mon".
我们可以使用insert和into关键字在序列的最后插入"Tue"。
insert "Tue" into days;
类似的,我们添加 "Fri", "Sat"和"Sun"。
insert "Fri" into days; insert "Sat" into days; insert "Sun" into days;
现在序列就包含了: "Mon", "Tue", "Fri", "Sat", and "Sun".
我们还可以使用insert和before关键字在给定的索引所指定的元素前面插入一项。记住,索引以0开始,所以"Fri"的索引是2.所以我们能够像下面这样在"Fri"前面插入"Thu".
insert "Thu" before days[2];
现在序列包含了: "Mon", "Tue", "Thu", "Fri", "Sat", and "Sun".
在"Wed"后面插入"Tue",我们能使用insert和after关键字:
insert "wed" after days[1];
现在序列包含了一周的所有天: "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", and "Sun".
-从序列里删除项
delete和from关键字使得从序列里面删除项变得很简单。
delete "Sun" from days;
现在序列包含:"Mon", "Tue", "Wed", "Thu", "Fri", and "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]
-比较序列
有时你可能会要比较序列是否相等。序列是按值来比较的:如果长度相同,里面的项也相同,那么他们就是相等的。
让我们来测试一下:
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);
这里输出"flase",因为第二个序列比第一个序列长,所以两序列不相等。
我们还能通过修改项的值来使两个序列不相等,即使两个序列的长度仍然相等:
var seq1 = [1,2,3,4,5]; var seq2 = [1,3,2,4,5]; println(seq1 == seq2);
代码将会还是打印"false",因为两个序列不等。
-使用序列片段
序列片段提供访问序列的一部分的功能。
seq[a..b]
这段语法将访问索引a和索引b之间的所有的元素。下面的脚本创建了一个只包含"Sat"和"Sun"的表示周末的序列。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; var weekend = days[5..6];
seq[a..<b]
在索引a和b之间,且靠近b的地方使用"<",将不包含索引b。我们可以用这个创建"Mon" 到"Fri"的表示工作日的序列。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; var weekdays = days[0..<5];
seq[a..]
省略第二个索引,你能够访问从索引a到最后的所有项!举同样的例子,我们可以像下面这样创建表示周末的序列:
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..<];
这里创建一个包含从 "Mon" 到 "Sat"的序列。
1 楼 terryang 2009-12-17 17:56