开发者

Flex AS3 Arraycollection sorting based on Array of values

I have been working on sorting Arrayco开发者_C百科llection like ascending , descending the numeric list. Total length of my collection will go up to 100. Now I want to preform sort to nested data like this

Data Structure

Name : String
Categories : Array ["A","x or y or z","C"]

Categories array will have maximum 3 items , out of that three items the second item can have 3 different values either X or Y or Z. My result data looks like here

{"Mike" , ["A","x","C"]}
{"Tim" , ["A","y","C"]}
{"Bob" , ["A","x","C"]}
{"Mark" , ["A","z","C"]}
{"Peter" , ["A","z","C"]}
{"Sam" , ["A","y","C"]}

anyone please explain how to sort this type of data in a way showing all "x" first , "y" next and "z" at the last and vice a versa. Any help is really appreciated. Thanks Anandh. .


You can specify a compare function in your SortField like this:

var sortfield:SortField = new SortField("Categories");
sortfield.compareFunction = myCompare;

var sort:Sort = new Sort();
sort.fields = [sortfield];

yourCollection.sort = sort;

and your compare function:

function myCompare(a:Object, b:Object):int {
   /*
       return -1, if a before b
       return 1,  if b before a
       return 0,  otherwise
   */
}

or something like that.. and it's untested code :)


I have created a new property to the data structure called categoryOrder In the setter I did the following and Am using the categoryOrder for sorting - sortBy = categoryOrder;. I understand little hard coding is needed but still I believe this will reduce the number of comparisons when I use compareFunction. Anyone please valid this idea. Thanks!

    public function set categories(data:ArrayCollection) :void
    {
        if(data != null)
        {
            _categories = data;
            for each(var categorie:Object in data)
            {
                switch(categorie.categoryName)
                {
                  case "x":{categoryOrder = 1;break;}
                  case "y":{categoryOrder = 2;break;}
                  case "z":{categoryOrder = 3;break;}
                 }
            }
        }
    }

Data Structure

Name : String
Categories : Array ["A","x or y or z","C"]
categoryOrder : Number
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜