第五课 Sequences
一、创建Sequences
创建Sequences的一种方法是明确列出它的项目。每个项目以逗号分隔,所列项目用方括号[]括起来。
示例代码1:
def weekDays = ["Mon","Tue","Wed","Thu","Fri"];
[说明]:上面的代码把一组字符串赋给了weekDays,用def是因为不打算改变其项目。这个Sequence中的每一项都是String类型的。如果想把各项目定义为Interger,可以这样def nums = [1,2,3];。
可以明确地指明Sequence的类型
示例代码2:
def weekDays: String[] = ["Mon","Tue","Wed","Thu","Fri"];
Sequence里也可以包括其他的Sequence
示例代码3:
def days = [weekDays, ["Sat","Sun"]];
[说明]:这种情况下,编译器会把days转换为下面代码所示的Sequence
示例代码4:
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
创建Sequences也可尝试缩略的形式,要创建一个从1到100的Sequence,可以这样写
示例代码5:
def nums = [1..100];
示例代码6:
override public function create():Node{
return Group{
content :[
ImageView{
image:image
effect: bind PerspectiveTransform{
ulx: lx uly:uly
urx: rx ury:ury
lrx: rx lry:height + uly
llx: lx lly:height + ury
}
},
Rectangle{
translateX: bind lx
width: bind rx - lx
height: height
fill: Color.rgb(0,0,0,0)
blocksMouse: true
onMousePressed:function(e:MouseEvent){
shelf.shiftToCenter(this);
};
}
]
}
}
[说明]:ImageView是content这个Sequence 的第一项,Rectangle是content这个Sequence 的第二个项。两项之间用逗号分隔。
使用判断
可以使用一个布尔表达式(也叫判断),用已经存在的Sequence来声明一个新的Sequence。下面是一个已经存在的Sequence。
示例代码7:
def nums = [1,2,3,4,5];
基于上面的Sequence来创建一个新的Sequence,不过的项是在于2的。
示例代码8:
def numsGreaterThanTwo = nums[n | n > 2];
[说明]:1.新创建的sequence存储在numsGreaterThanTwo里;
2.代码nums[n | n > 2];中nums是原来的sequence.
3.从nums里选择出来的项返回给新的sequence.
4.'|'是分隔代码的,从nums[n | n > 2];分隔出n.
5.nums[n | n > 2];中加粗部分是一个布尔表达式.
二、访问Sequence的项
Sequence的项通过从0开始的数字索引来访问。
示例代码9:
def 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
三、得到Sequence大小
示例代码10:
sizeof days
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; println(sizeof days);
四、插入项到Sequence里
有三种方式,顺序插入(insert ... into ... ),插到某项前(insert ... befor ...[..]),插到某项后(insert ... after ...[..])
示例代码11:
var days = ["Mon"];
insert "Tue" into days;
insert "Fri" into days;
insert "Sat" into days;
insert "Sun" into days;
insert "Thu" before days[2];
insert "wed" after days[1];
五、删除项
有三种方式,如下面代码。
示例代码12:
delete "Sun" from days;
delete days[0];
delete days;
六、反转Sequence
使用操作符reverse 可以很容易的得到sequence的项。
示例代码13:
var nums = [1..5]; reverse nums; // returns [5, 4, 3, 2, 1]
七、比较Sequence
比较两个sequence是否相等,用运算符==。
示例代码14:
def seq1 = [1,2,3,4,5];
def seq2 = [1,2,3,4,5];
println(seq1 == seq2);
输出结果:true
示例代码15:
def seq1 = [1,2,3,4,5];
def seq2 = [1,2,3,4,5,6];
println(seq1 == seq2);
输出结果:false
示例代码16:
def seq1 = [1,2,3,4,5]; def seq2 = [1,3,2,4,5]; println(seq1 == seq2);
输出结果:false
两个sequence只有在项数相同,项值相同,位置相同的情况下才相等。
使用sequence切片
切片访问sequence的部分
seq[a...b]
示例代码17:
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; def weekend = days[5..6];
[说明]:weekend包括"Sat"和"Sun"。
seq[a...<b]
示例代码18:
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; def weekdays = days[0..<5];
[说明]:weekdays包括"Mon","Tue","Wed","Thu","Fri"。seq[a...]示例代码19:
def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; def weekend = days[5..];[说明]:weekend包括"Sat"和"Sun"。seq[a...<]def days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; def days2 = days[0..<];
[说明]:day2包括"Mon","Tue","Wed","Thu","Fri","Sat"。