第 5 课:序列
来源:互联网 发布:中国和伊朗的关系知乎 编辑:程序博客网 时间:2024/05/05 23:09
第 5 课:序列
如果您有一系列项,则需要了解 sequence 。本课向您展示了如何创建、使用和比较 sequence 。本课还介绍了如何访问称为 slice 的序列子集。 |
- | 创建序列 |
- | 使用布尔表达式创建序列 |
- | 访问序列中的项 |
- | 在序列中插入项 |
- | 从序列中删除项 |
- | 颠倒序列中项的次序 |
- | 比较序列 |
- | 使用序列子集 |
除了五种基本的数据类型外,JavaFX Script 编程语言还提供称为序列的数据结构。序列表示对象的有序列表;序列中的对象称为项。使用方括号 "[]" 来声明序列,其中的每个项都用一个逗号进行分隔。
创建序列的一种方法是显式列出其各个项。每个元素都用一个逗号进行分隔,列表用方括号 [
和 ]
括起来。例如,下面的代码:
var weekDays = ["Mon","Tue","Wed","Thu","Fri"]; |
声明一个序列并将其赋给名为 weekDays
的变量。编译器知道我们打算创建一个“字符串序列”,因为每个项都声明为 String
字面值。如果序列是使用 Integer
声明的(例如,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]; |
您可以使用布尔表达式或谓词声明一个为现有序列的子集的新序列。例如,请考虑以下代码:
var nums = [1,2,3,4,5]; |
要创建第二个序列(基于此第一个序列中的项)但仅包含大于 2 的数字,请使用以下代码:
var numsGreaterThanTwo = nums[n | n > 2]; |
可以将上面的代码行用中文表示为:“从 nums
序列中选择项值大于 2 的所有项并将这些项赋给名为 numsGreaterThanTwo
的新序列。”以粗体突出显示的“项值大于 2”子句是谓词。
在这些代码中:
- 新创建的序列存储在一个名为
numsGreaterThanTwo
的变量中。 - 代码
nums[n | n > 2];
中标记为绿色的部分指定要从中复制项的原始序列。在我们的示例中,nums
是现有序列的名称。 - 这会选择
nums
中的项,并按顺序返回一个由使表达式为 true 的项构成的新序列。 - "|" 字符用来在视觉上将变量 "n" 与代码的其余部分隔开:
nums[n | n > 2];
- 代码
nums[n | n > 2];
中标记为绿色的部分定义一个布尔表达式,该表达式指定将当前元素复制到新序列中时需要满足的条件。
序列中的项是按数字索引(从 0 开始)进行访问的。要访问单个元素,请键入序列名称,后跟元素的数字索引(用方括号括起来):
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; |
这会将以下内容输出到屏幕上:
Mon |
您还可以使用后跟序列名称的 sizeof
运算符来确定序列的大小:
sizeof days |
以下代码会将 "7" 输出到屏幕上:
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; |
insert
关键字可用于在序列中特定元素的前面或后面插入一个元素。
注:序列实际上是不可变的,即一经创建就永不更改。在修改序列(例如通过插入或删除项)时,会在后台创建一个新序列并重新指定序列变量,这会给人一种序列已被修改的印象。
让我们通过重新创建 days
序列来对此进行研究:
var days = ["Mon"]; |
此时,该序列仅包含一个元素:"Mon"
。
我们可以使用 insert
和 into
关键字在该序列的末尾插入 "Tue"
:
insert "Tue" into days; |
类似地,我们也可以添加 "Fri"
、"Sat"
和 "Sun"
:
insert "Fri" into days; |
该序列中包含:"Mon"
、"Tue"
、"Fri"
、"Sat"
和 "Sun"
。
我们还可以使用 insert
和 before
关键字在给定索引处的元素前面插入一个元素。请记住,索引是从 0 开始的,因此,在当前的序列中,"Fri"
位于索引位置 2。因此,我们可以在 "Fri"
前面插入 "Thu"
,如下所示:
insert "Thu" before days[2]; |
该序列中现在包含:"Mon"
、"Tue"
、"Thu"
、"Fri"
、"Sat"
和 "Sun"
。
要在 "Tue"
后面插入 "Wed"
,我们可以使用 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]; |
有时,您可能希望对序列进行比较,看它们是否相等。序列是按值来比较是否相等的:如果它们的长度相同而且各个项相等,则它们相等。
让我们创建两个具有相同内容的序列来对此进行测试:
var seq1 = [1,2,3,4,5]; |
表达式 seq1 == seq2
的值为 true
,因为这两个序列具有相同数量的项,而且这两个序列中每个元素的值都相等。因此,这些代码会将 "true" 输出到屏幕上。
通过更改其中一个序列中项的数量(而不更改另一个序列),这两个序列现在具有不同的长度:
var seq1 = [1,2,3,4,5]; |
由于第二个序列比第一个序列长,从而这两个序列不相等,因此该脚本的输出为 "false"。
我们还可以通过更改元素值来使两个序列不相等(即使这两个序列的长度仍相同):
var seq1 = [1,2,3,4,5]; |
由于这两个序列不相等,因此这些代码将再次输出 "false"。
序列子集提供对序列某些部分的访问。
seq[a..b]
此语法提供对位于索引 a
和索引 b
之间(含 a 和 b)各个项的访问。以下脚本创建一个 weekend
序列,其中仅包含 "Sat"
和 "Sun"
项。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; |
seq[a..<b]
使用 "<" 字符可以访问位于索引 a
和索引 b
之间(含 a,不含 b)的项。我们可以对 days
使用此方法来创建一个 weekdays
序列,其中包含项 "Mon"
至 "Fri"
。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; |
seq[a..]
通过省略第二个索引,可以访问从索引 a
到序列末尾处的所有项。为了与上一个示例保持一致,我们可以按如下方式创建 weekend
序列:
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; |
seq[a..<]
最后,您可以使用不带第二个索引的 "<" 来访问从索引 a
到序列末尾处的所有元素(不含最后一个元素)。
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; |
此版本会创建一个 days2
序列,其中包含项 "Mon"
至 "Sat"
。
- 第 5 课:序列
- 第4周项目5 返回Fibnacci序列中的第n个数
- 第4周项目5:用递归方法输出Fibnacci序列的第20个数
- 第11章 序列化
- 第11章 序列化
- 二叉树基础-由中根序列和后根序列重建二叉树(数据结构基础 第5周)
- 第4第5课
- 第3章 序列化与压缩 3.1序列化
- 输出指定序列的前面第N个序列
- 第144课: Spark面试经典系列之NULL值问题及序列化错误
- 第144课:Spark面试经典系列之NULL值问题及序列化错误
- 0,1,1,2,3,5,8.....输出第20个数的fibnacci序列
- 第四周项目5:用递归方法求解(4)求Fibnacci序列的第二十个数
- 动态规划2-最长上升子序列(算法基础 第5周)
- 深度解密 python challenge第5关之【用 pickle 序列化 】
- 金融时间序列分析:第3版
- Fibnacci序列中的第20个数
- 求Fibnacci 序列的第 20 个数
- 华为Eclipse插件开发面试题
- 第 3 课:使用对象
- hibernate集合映射inverse和cascade详解
- DOS中使用扩展内存与XMS操作库设计
- 第 4 课:数据类型
- 第 5 课:序列
- 常用排序算法
- 第 6 课:运算符
- Java编程那些事儿49—多维数组使用示例1
- 第 7 课:表达式
- 弹出页面的方法
- 第一次写博客
- 第 8 课:数据绑定和触发器
- 18岁的舞台