2 мая 2012 г.

ActionLinq имплементация языка запросов LINQ для ActionScript.

Многие наверно читали или слышали про язык запросов 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. Там же есть кое какие примеры . Так же если хотите больше примеров рекомендую посмотреть на юнит тесты проекта.