JavaFx中文入门教程--数组

来源:互联网 发布:达梦数据库dm6下载 编辑:程序博客网 时间:2024/06/14 00:36

 http://cnjavafx.cn/javafx/index.html

 

数组

除了五种基本类型,JavaFx还提供了另外一个很常用的数据结构,数组。这个类型的英文名字为sequence,准确的说,不能翻译成数组,实际从行为上看更像是ArrayList。姑且称之为数组,并不影响理解。

定义格式:[...],用方括号括起来,逗号分隔的一串表达式值。

下面是两个简单的数组定义:
var weekDays = ["Mon","Tue","Wed","Thur","Fri"];
var days = [weekDays, ["Sat","Sun"]];


数组表示一串有序的对象。但是,数组本身跟其他对象是有区别的,这个体现在,数组不能嵌套。在上例中的days,在表达式中出现了嵌套的数组,会被自动平展开。比如上面例子中:
days == ["Mon","Tue","Wed","Thur","Fri","Sat","Sun"]; // returns true

数组是通过值来比较是否相等的,只有元素个数相等,且每一个元素也相等的时候,两个数组才被认为相等。

另外,有一个例外的地方,单个对象跟只有一个元素的数组是相等的,即:
1 == [1]; // returns true

数组类型的变量是通过[]来表示的,所以,数组会声明成这个样子:
var xs:Number[]; // Number 数组
var strs:String[]; // 字符串数组


数组元素可以通过下标来访问,这个跟Java的语法一样:
var wednesday = days[2];

为了方便书写,JavaFx提供了一个简便的方法,用".."来表示一个数字数组。就像这样:
var nums = [1..100];
var nums2 = [1..100 step 2];

[]操作符支持元素过滤,语法为:
数组[变量|逻辑表达式]

例如:
var nums = [1,2,3,4];
var numsGreaterThanTwo = nums[n|n > 2];

片段操作(slice),这个操作十分灵活,比较有用。
seq[a..b]  // a, b 之间的元素,包括a,b
seq[a..<b] // a, b 之间的元素,包括a, 不包括b
seq[a..]  // 跟 seq[a..<sizeof seq] 一样
seq[a..<] // 跟 seq[a..<sizeof seq-1] 一样

for 遍历

看一个简单的完整例子:sequence01.fx
package example;

import java.lang.System;

var seq1 = [1, 2, 'abc', 23.5, 3ms];

System.out.println(seq1);

for (it in seq1) {
    System.out.println(it);
}


编译运行看结果:
#javafxc sequence01.fx -d .

#javafx example.sequence01
[ 1, 2, abc, 23.5, 3.0ms ]
1
2
abc
23.5
3.0ms

where 操作

可以在数组后面附带一个where语句,对数组元素遍历进行一个过滤条件的设置。看一段代码:sequence02.fx
package example;

import java.lang.System;

function factors(n:Number) {
    return for (i in [1 .. n/2] where n mod i == 0) i;
}

for (i in factors(56)) {
    System.out.println(i);
}


for表达式的值是每次循环的返回值所组成的一个数组,所以这里factors的返回值是一个数组,元素为符和整除56的条件。
#javafxc sequence02.fx -d .

#javafx example.sequence02
1.0
2.0
4.0
7.0
8.0
14.0
28.0


where的另一种比较简便的写法
var s = [1,2,3,4,5];

for (i in s[n|n mod 2 == 0]) {
    System.out.println(i);
}

indexof 操作

在for代码块中可以用indexof 操作符,得到当前元素的下标。
package example;

import java.lang.System;

var nums = [1..5];
var numsExceptTheFirstTwo = nums[n|indexof n > 1]; // returns 3,4,5

for ( i in numsExceptTheFirstTwo) {
    System.out.println("{indexof i}:{i}");
}

#javafxc sequence03.fx -d .

#javafx example.sequence03
0:3
1:4
2:5

数组增删改

insert:插入一个新元素
insert x into seq
insert x before seq[idx]
insert x after seq[idx]


delete:删除一个元素
delete seq
delete x from seq
delete seq[idx]
delete seq[a..b] // 删除一个片段


一个完整的例子:sequence04.fx
var nums = [1..5];
var x = 6;
insert x into nums; // result is [1,2,3,4,5,6]
x++;
insert x before nums[0]; // result is [7,1,2,3,4,5,6]
x++;
insert x after nums[3]; // result is [7,1,2,3,8,4,5,6]

// DELETE EXAMPLES

nums = [1..5];
delete 2 from nums; // result is [1,3,4,5]
delete nums[0];// result is [3,4,5]
nums = [1..10]; // result is [1,2,3,4,5,6,7,8,9,10]
delete nums[3..7]; // result is [1,2,3,9,10]
delete nums; // result is []
nums = [1..10];
delete nums[5..]; // result is [1,2,3,4,5]
delete nums[0..>]; // result is [5]

 

数组元素倒置:
var nums = [1..5];
reverse nums; // returns 5,4,3,2,1