在 JavaScript 中,針對 for 迴圈有特殊的語法處理,使得我們可以巡迴物件中的所有變數和函式。例如我們自己建立一個物件 obj,並且設定它的欄位 name 為 John,欄位 age 為 20,那麼使用底下程式碼,我們便能將 obj 中的所有變數(事實上還包括函式)找出來,並且顯示在彈出式視窗中。
// JavaScript
var obj = new Object()
obj.name = "John"
obj.age = 20
var str = ""
for (var i in obj) {
str += "obj." + i + " = " + obj[i] + "\n"
}
alert(str)
Java 與 C++ 中的迭代器尋訪集合
在 Java 中,和 C++ 相同的是,我們必須要知道陣列的長度,或是使用迭代器取得「是否有下一位」的資訊,才能尋訪所有陣列或容器中的元素。例如:
// Java 集合
list = getSomeList();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Integer value=(Integer) iterator.next();
}
// Java 陣列
array = getSomeArray();
for (int i = 0, j = array.length; i < j; i++) {
System.out.println(array[i]);
}
// C++ 容器
dirs = getSomeReferenceVector();
for (vector::iterator iter = dirs->begin(); iter != dirs->end(); iter++) {
cout<<"Reading "<<(*iter)<<" ...";
}
Java 1.5 的 foreach 迴圈
在 Java 1.5 中,針對 for 迴圈作了一些加強,讓我們無需知道陣列或容器的長度,甚至也不用迭代器,便可以將其中的元素一一取出。使用的語法是 for (Type varName : listName),即可將 listName 中的元素依順序由型別為 Type 的變數 varName 存取,當然陣列或容器中元素的型別必須是可以轉型為 Type 的物件。底下例子包含 Generic Types 及 Auto-boxing 特性。
import java.util.List;
import java.util.Vector;
public class EnhancedForLoop1 {
public static void main(String[] args) {
List list = new Vector();
for (int i = 0; i < 6; i++) {
list.add(i);
}
for (Integer i : list) {
System.out.print(i * 100);
System.out.print("-");
}
}
}
輸出結果:
0-100-200-300-400-500-
陣列及基本型別
底下是一個使用陣列及基本型別的例子。
public class EnhancedForLoop2 {
public static void main(String[] args) {
int[] array = new int[6];
for (int i = 0, j = array.length; i < j; i++) {
array[i] = i;
}
for (int i : array) {
System.out.print(i * 100);
System.out.print("-");
}
}
}
Map 映射
底下是一個尋訪所有 value 的 for 迴圈。當然,因為用 HashMap,所以並沒有什麼順序。
import java.util.Map;
import java.util.HashMap;
public class EnhancedForLoop3 {
public static void main(String[] args) {
Map map = new HashMap();
for (int i = 0; i < 6; i++) {
map.put(i, "Number:" + i);
}
for (String i : map.values()) {
System.out.println(i);
}
}
}