是否有可能在actionscript中轻松建立索引数组关联?

时间:2011-02-15 02:54:53

标签: actionscript-3 multidimensional-array associative-array

我已经制作了一个多维数组,通过csvlib从CSV文件中引入

我还有一个数组中的标题,我想要一种方法将此数组指定为数组的键。

这是一个简化

有一个像这样的数据数组

data [0] - > [0]蓝色,[1] 1984年,[2]周三 [1] - > [0]绿色,[1] 1926年,[2]周五

和一个简单的键/属性数组(标题数组),如下所示:

[0]颜色,[1]年,[2]工作日

我想插入要制作的按键 数据[0] - > [颜色]蓝色,[年] 1984年,[工作日]周三 [1] - > [颜色]绿色,[年] 1926年,[工作日]周五

我已经阅读了一些关联数组,但我没有得到如何做到这一点。 (这里有38个属性,所以请记住哪个属性在直接索引数组中会非常不方便)

2 个答案:

答案 0 :(得分:1)

嗯,你只想让你的二级数组成为一个简单的对象。让我给你看一些代码:

var data:Array = [];

var record1:Object = {"colour": "blue", "year": "1984", "weekday": "wednesday"};
var record2:Object = {"colour": "green", "year": "1926", "weekday": "friday"};

data.push(record1);
data.push(record2);

trace("record 1:", data[0]["colour"], data[0]["year"], data[0]["weekday"]);
trace("record 2:", data[1]["colour"], data[1]["year"], data[1]["weekday"]);

输出:

record 1: blue 1984 wednesday
record 2: green 1926 friday

所以我会将数据数组转换成你想要的结构,如下所示:

for (var i:int = 0; i < data.length; i++) {
  var record:Array = data[i];
  var newRecord:Object = {};

  for (var index:int in record)
    newRecord[headers[index]] = record[index];  

  data[i] = newRecord;
}

现在你的数据数组是一个关联数组的数组。

答案 1 :(得分:1)

我假设您的CSV使用;作为字段分隔符,您使用URLLoader读取CSV,并且加载成功完成。

在您的completeHandler中,您现在将调用csvToArray(loader.data as String);

private function csvToArray ( data : String ) : Array
{
    var lines : Array = data.split ( /\R/ );
    var keyArray : Array = lines.splice ( 0, 1 )[0].split ( ";" );
    var assocArray : Array = [];
    for each (var line:String in lines)
    {
        var valArray : Array = line.split ( ";" );
        var assoc : Object = {};
        for (var i : int = 0; i < keyArray.length; i++)
        {
            var key : String = keyArray[i];
            if (key != null && key != "") assoc[key] = valArray[i];
        }
        assocArray.push ( assoc );
    }
    return assocArray;
}

以下是发生的事情:

  1. 将CSV的第一行读入keyArray
  2. 将剩余的每一行读入valArray
  3. 使用两者填充assocArray