我有一个动态创建的arrayCollection
,就像在底部一样:
arrCol = ({"ID":ids[i][0], "Price":ids[i][1], "OtherInfo":ids[i][2]});
我想按ID分组数据并汇总Price
。
如果这个ArrayCollection
是一个SQL表,我可以使用这样的查询:
SELECT ID, SUM(Price), OtherInfo
FROM TableA
GROUP BY ID
那么如何设置AS3函数,如SQL中的查询示例,或者是否有任何本地ArrayCollection
类?
答案 0 :(得分:0)
虽然您无法在AS3中创建SQL类型查询,但您可以使用其常规方法来实现相同的结果。
// Work with an array. Child elements must be an associative array (structure/object/hash-table)
var ac:Array = [
{"name":"apple", "price":100, "color":"red"},
{"name":"banana", "price":50, "color":"yellow"},
{"name":"pear", "price":250, "color":"green"},
]
// Apply the order your want based on the property you're concerned with.
ac.sortOn("price", Array.ASCENDING)
// If necessary, create a subset of that array with the "select"-ed columns.
var output:Array = [];
for each (var entry:Object in ac) {
output.push({entry.name, entry.color});
}
// Printing output will result in
// 0:{"name":"banana", "color":"yellow"},
// 1:{"name":"apple", "color":"red"},
// 2:{"name":"pear", "color":"green"}
答案 1 :(得分:0)
试试这个,没有内置功能可供您使用(sum,groupby)所以我们需要手动执行以下代码才能帮到您。
var arrCol:ArrayCollection = new ArrayCollection();
arrCol.addItem({"ID":1, "Price":100, "OtherInfo":"info"});
arrCol.addItem({"ID":1, "Price":700, "OtherInfo":"info"});
arrCol.addItem({"ID":2, "Price":100, "OtherInfo":"info"});
arrCol.addItem({"ID":2, "Price":200, "OtherInfo":"info"});
arrCol.addItem({"ID":3, "Price":100, "OtherInfo":"info"});
arrCol.addItem({"ID":3, "Price":400, "OtherInfo":"info"});
arrCol.addItem({"ID":3, "Price":100, "OtherInfo":"info"});
var dic:Dictionary = new Dictionary();
for each (var item:Object in arrCol)
{
if(!dic[item.ID]){
dic[item.ID] = item;
}
else{
var oldSumObj:Object = dic[item.ID];
oldSumObj.Price +=item.Price;
dic[item.ID] = oldSumObj;
}
}
var groupedList:ArrayCollection = new ArrayCollection();
for each (var itemObj:Object in dic)
{
groupedList.addItem(itemObj);
}
输出将是:
"groupedList" mx.collections.ArrayCollection (@27af939)
[0] Object (@8836569)
ID 1
OtherInfo "info"
Price 800 [0x320]
[1] Object (@87a7c71)
ID 2
OtherInfo "info"
Price 300 [0x12c]
[2] Object (@87a7bc9)
ID 3
OtherInfo "info"
Price 600 [0x258]