JavaFX中的序列

如果你有多个数据元素,你可以考虑学习序列这种数据结构。这一节将为你展示怎样创建、使用和比较序列,以及访问序列的子集——切片(子序列)。

Contents

- Creating Sequences
- Creating Sequences with Boolean Expressions
- Accessing Sequence Items
- Inserting Items into a Sequence
- Deleting Items from a Sequence
- Reversing the Items in a Sequence
- Comparing Sequences
- Using Sequences Slices

Creating Sequences
创建序列

除了5种基本数据类型之外,JavaFX也提供了序列这种数据结构。序列代表着对象的有序列表,序列中的对象称为项(item,或译为元素)。序列以方括号声明,每一数据项用逗号分割。

创建序列的一种方法是显式地列出它的每一项。每一项用逗号分割,列表用方括号括起来。下面是一个例子:
var weekDays = ["Mon","Tue","Wed","Thu","Fri"];

声明了一个序列并把它赋值给变量weekDays。编译器知道我们要建一个字符串序列,因为序列中的项都是字符串。如果序列中的项是整型(例如,var nums = [1,2,3];),编译器就会认为我们希望创建一个整数的序列。

你也可以显式地指明一个序列的类型,在变量类型后面加一个[]:
var weekDays: String[] = ["Mon","Tue","Wed","Thu","Fri"];

这将告诉编译器变量weekDays将接纳一个字符串序列(跟单一的字符串相对照)。

序列也可以嵌套在其他序列中:
var days = [weekDays, ["Sat","Sun"]];

在这种情况下,编译器自动将这种嵌套的序列转化为一个序列,使上面的语句等价于:
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

创建算术序列时有一种简写格式。如创建包含1到100的序列,用下面的格式:
var nums = [1..100];

Creating Sequences with Boolean Expressions
用布尔表达式创建序列

你可以用布尔表达式,来声明一个为已知序列的子集的序列。
var nums = [1,2,3,4,5];

创建第二个序列(基于第一个序列项),仅包括大于2的数字,用下面的代码:
var numsGreaterThanTwo = nums[n | n > 2];

上面的代码可以用这样的话表达:在num序列里选择所有值大于2的项,然后赋给名为numsGreaterThanTwo的新序列。

Accessing Sequence Items
访问序列项

序列项可以通过索引号来访问,索引号从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);

Inserting Items into a Sequence
增加项

insert关键字允许你向序列中增加一个元素,在特定的元素之前,或之后。
--------------------------------------------------------------------
注意:实际上,序列是不可变的,这意味着一旦创建序列就不可更改。当修改序列的时候,例如插入或删除序列项,后台创建了一个新序列,并赋给原来的变量,给人的印象就是序列被修改了。
--------------------------------------------------------------------
让我们通过再次创建days序列来做一下探讨:
var days = ["Mon"];

此时,序列仅包含一个元素,“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”和“Sun”。

同样可以用insert和before关键字将元素插入特定的项前面。牢记索引号从0开始,在当前的序列里,“Fri”在索引号为2的位置。因此,我们可以将“Thu”插入到“Fri”前面,如下:
insert "Thu" before days[2];

现在序列包含:“Mon”,“Tue”,“Thu”,“Fri”,“Sat”。

为了在“Tue”后面加入“Wed”,我们可以使用insert和after关键字:
insert "wed" after days[1];

现在序列包含了一周的所有天:“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”,“Sun”。

Deleting Items from a Sequence
删除项

使用delete和from关键字可以很容易地从序列中删除项:
delete "Sun" from days;

序列现在包含:“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”。

你也可以根据索引的位置删除元素。下面的代码从序列中删除“Mon”(记住第一个元素的索引号为0)。
delete days[0];

从一个序列中删除所有的项,使用delete关键字加序列名:
delete days;

注意,delete操作只是移除序列里的项,并不删除days变量。你仍可以访问days变量并向它插入新的项。

Reversing the Items in a Sequence
转置项

你可以简单的转置项,通过reverse操作符:
var nums = [1..5];
reverse nums; // returns [5, 4, 3, 2, 1]

Comparing Sequences
比较序列

很多时候需要对比序列是否相等。序列通过“值”来判断:如果序列长度相等,并且项的值也相等,那么序列相等。

测试一下,创建两个具有相同内容的序列:
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”,因为序列不等。

Using Sequence Slices
使用序列切片(子序列)

序列切片提供了访问序列的局部内容的功能。
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开始(包含a)到b结束(不包含b)的序列。我们可以在days基础上创建一个包含从“Mon”到“Fri”的序列。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekdays = days[0..<5];

seq[a..]

省略第二个索引号,访问的是从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..<];

This version creates a days2 sequence consisting of the items "Mon" through "Sat".
这将创建一个包含从“Mon”到“Sat”的序列days2。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值