Сортировка словаря Flex - PullRequest
       8

Сортировка словаря Flex

4 голосов
/ 05 декабря 2009

У меня есть следующий словарь в flex, и я хотел бы отсортировать его по значению. Не удалось найти ресурс.

'1'=>2, '0' =>1, '3'=>4 ..

Есть идеи? Как я могу отсортировать это по значению?

Ответы [ 2 ]

12 голосов
/ 13 февраля 2010

Я искал подобное решение, за исключением того, что мне нужно было отсортировать карту словаря и вернуть отсортированную коллекцию, относящуюся к парам ключ-значение. Не найдя опубликованного решения, я собрал подход, изложенный ниже. Этот метод принимает словарь в качестве входных данных, создает массив, поддерживающий ассоциацию, затем сортирует результирующий массив с помощью array.sortOn () и возвращает отсортированные результаты обратно в виде массива. Поля «ключ» и «значение» в массиве в приведенном ниже примере используются для ясности, но можно использовать любое имя поля.

В этом примере предполагается использование строкового объекта в качестве ключа и числового объекта в качестве значения, хотя, конечно, можно использовать любой тип объекта и настраивать параметры поля.

Приведенный ниже подход также можно использовать для сортировки по ключу вместо значения, используя «ключ» в качестве поля сортировки для метода sortOn, и вы можете использовать параметры сортировки, отличные от сортировки по убыванию чисел, которую я использовал здесь ( Документация AS3 SortOn () ) Приведенный ниже код намеренно не является универсальным, чтобы упростить его для примера.

      public static function sortDictionaryByValue(d:Dictionary):Array
        {
          var a:Array = new Array();
          for (var dictionaryKey:Object in d)
          {
            a.push({key:dictionaryKey,value:d[dictionaryKey]});
          }
          a.sortOn("value",[Array.NUMERIC|Array.DESCENDING]);
          return a;
        }   
3 голосов
/ 05 декабря 2009

Наверное, не лучший способ сделать это, но это работает:

var a:Array = new Array();
for each (var v:Number in dict)
{
  a.push(v);
}

a.sort();
...