JavaFx中文入門教程--數組

 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章