Многие наверно читали или слышали про язык запросов LINQ.
Это чрезвычайно удобное средства обработки данных. По удобству использование не уступающий и иногда даже немного превосходящий старый добрый SQL. Собственно, почему я это пишу.
Несколько месяцев назад мне нужно было, как то сгруппировать и обработать данные в массиве внутри Flex ActionScript приложения. Но я не хотел обрабатывать объекты просто перебирая их в цикле. И я тогда
нашел ActionLinq.
Итак, ActionLinq это практически полная имплементация языка запросов LINQ для ActionScript.
Вот простой пример
package
{
import flash.display.Sprite;
import System.Collection.Generic.IGrouping;
import System.Linq.Enumerable;
/**
* ...
* @author ami...[at]mail.ru
*/
public class AcLinq extends Sprite
{
public function AcLinq()
{
var data:Array = [ { name: "Сергей", age: 20, city: "Москва" },
{ name: "Максим", age: 21, city: "Москва" },
{ name: "Володя", age: 25, city: "Минск" },
{ name: "Сергей", age: 19, city: "Минск" } ];
var new_data:Array = Enumerable.from(data).groupBy(function(name:Object):String
{
return name.name;
},
function(values:Object):Object
{
return {age: values.age, city: values.city};
},
function(name:String, vals:IGrouping):Object
{
return { name: name, count:vals.count() };
}).toArray();
/*
* А получаем мы в итоге нечто вроде
* Сергей, 2
* Володя, 1
* Максим, 1*/
trace(new_data);
}
}
}
А самым удобным является что внутри конструкций function() можно определять любые стандартные операторы и конструкции ActionScript и возвращать нужные значения.
На странице wiki
ActionLinq
можно прочитать, что поддерживаются многие операторы LINQ. Там же есть кое какие примеры . Так же если хотите больше примеров рекомендую посмотреть на юнит тесты проекта.