Flex AS3 Arraycollection сортировка на основе массива значений - PullRequest
1 голос
/ 08 апреля 2011

Я работал над сортировкой Arraycollection как по возрастанию, по убыванию числового списка.Общая длина моей коллекции увеличится до 100. Теперь я хочу выполнить предварительную сортировку для вложенных данных, таких как

Структура данных

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

Массив категорий будет иметь максимум3 элемента, из этих трех элементов второй элемент может иметь 3 различных значения: X, Y или Z. Мои данные результатов выглядят так:

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

. Любой, пожалуйста, объясните, как отсортировать данные этого типа вспособ, показывающий все "x" сначала, "y" затем и "z" в конце и наоборот.Любая помощь очень ценится.Спасибо, Ананда..

Ответы [ 2 ]

4 голосов
/ 08 апреля 2011

Вы можете указать функцию сравнения в вашем SortField следующим образом:

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

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

yourCollection.sort = sort;

и ваша функция сравнения:

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

или что-то в этом роде ... и это непроверенный код:)

0 голосов
/ 08 апреля 2011

Я создал новое свойство для структуры данных под названием categoryOrder В установщике я сделал следующее и использую для заказа categoryOrder - sortBy = categoryOrder;.Я понимаю, что немного жесткого кодирования необходимо, но все же я верю, что это уменьшит количество сравнений, когда я использую CompareFunction.Любой, пожалуйста, подтвердите эту идею.Спасибо!

    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;}
                 }
            }
        }
    }

Структура данных

Name : String
Categories : Array ["A","x or y or z","C"]
categoryOrder : Number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...