怎样存储多组相关的数据
解决办法
使用多维数组存储
讨论
除了一维数组,还可以创建多维数组,比如beginGradientFill() 方法使用三个平行数组表示colors, alphas, 和ratios ,每个数组都有相同的下标。
创建平行数组,然后操作同一下标的元素,使用平行数组,很容易访问同一下标的相关元素,比如:
var colors:Array = [
"maroon",
"beige",
"blue",
"gray"];
var years:Array = [1997, 2000, 1985, 1983];
var makes:Array = [ "Honda", "Chrysler", "Mercedes", "Fiat"];
// 循环这些数组,因此数组的长度相同,可以用任何一个数组的length属性,下面的例子使用了
//makes.length.
for ( var i: int = 0; i < makes.length; i++) {
trace( "A " + colors[i] + " " +
years[i] + " " +
makes[i]);
// 显示:
// A maroon 1997 Honda
// A beige 2000 Chrysler
// A blue 1985 Mercedes
// A gray 1983 Fiat
}
var years:Array = [1997, 2000, 1985, 1983];
var makes:Array = [ "Honda", "Chrysler", "Mercedes", "Fiat"];
// 循环这些数组,因此数组的长度相同,可以用任何一个数组的length属性,下面的例子使用了
//makes.length.
for ( var i: int = 0; i < makes.length; i++) {
trace( "A " + colors[i] + " " +
years[i] + " " +
makes[i]);
// 显示:
// A maroon 1997 Honda
// A beige 2000 Chrysler
// A blue 1985 Mercedes
// A gray 1983 Fiat
}
需要注意的是,如果改变了数组长度,必须同时修改其他数组。
另一种方法就是创建多维数组,它是数组的数组:
// 创建数组cars,然后用数组组装填充,每个元素都是数组包含3个元素(color, year, make).
var cars:Array = new Array();
cars.push([ "maroon", 1997, "Honda"]);
cars.push([ "beige", 2000, "Chrysler"]);
cars.push([ "blue", 1985, "Mercedes"]);
cars.push([ "gray", 1983, "Fiat"]);
// 循环遍历数组
for ( var i: int = 0; i < cars.length; i++) {
// 显示:
// A maroon 1997 Honda
// A beige 2000 Chrysler
// A blue 1985 Mercedes
// A gray 1983 Fiat
TRace( "A " + cars[i][0] + " " +
cars[i][1] + " " +
cars[i][2]);
}
var cars:Array = new Array();
cars.push([ "maroon", 1997, "Honda"]);
cars.push([ "beige", 2000, "Chrysler"]);
cars.push([ "blue", 1985, "Mercedes"]);
cars.push([ "gray", 1983, "Fiat"]);
// 循环遍历数组
for ( var i: int = 0; i < cars.length; i++) {
// 显示:
// A maroon 1997 Honda
// A beige 2000 Chrysler
// A blue 1985 Mercedes
// A gray 1983 Fiat
TRace( "A " + cars[i][0] + " " +
cars[i][1] + " " +
cars[i][2]);
}
下面的代码用二重循环遍历二维数组:
for (
var i:
int = 0; i < cars.length; i++) {
for ( var j: int = 0; j < cars[i].length; j++) {
TRace( "Element [" + i + "][" + j + "] contains: " +
cars[i][j]);
}
}
for ( var j: int = 0; j < cars[i].length; j++) {
TRace( "Element [" + i + "][" + j + "] contains: " +
cars[i][j]);
}
}
从上面的例子来看,很难区别cars[i][0] 和cars[i][j]。但如果任何数组的长度发生变化这时cars[i][0]这种表示就很被动,需要修改代码才行。
另外对象数组的使用也很类似,只是多了个名称属性。对象数组用名称属性代替数字下标来索引元素:
// 创建数组cars,填充对象
// 每个对象有个make 属性,year 属性和color 属性
var cars:Array = new Array();
cars.push({make: "Honda", year: 1997, color: "maroon"});
cars.push({make: "Chrysler", year: 2000, color: "beige"});
cars.push({make: "Mercedes", year: 1985, color: "blue"});
cars.push({make: "Fiat", year: 1983, color: "gray"});
// 遍历数组
for ( var i: int = 0; i < cars.length; i++) {
trace( "A " + cars[i].color + " " +
cars[i].year + " " +
cars[i].make);
}
// 每个对象有个make 属性,year 属性和color 属性
var cars:Array = new Array();
cars.push({make: "Honda", year: 1997, color: "maroon"});
cars.push({make: "Chrysler", year: 2000, color: "beige"});
cars.push({make: "Mercedes", year: 1985, color: "blue"});
cars.push({make: "Fiat", year: 1983, color: "gray"});
// 遍历数组
for ( var i: int = 0; i < cars.length; i++) {
trace( "A " + cars[i].color + " " +
cars[i].year + " " +
cars[i].make);
}