2009-12-04 80 views
4

我有flex中的以下字典,我想按值排序。找不到任何资源。Flex字典排序

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

任何想法?我怎样才能按价值分类?

+0

您是否尝试按键或值进行排序? – 2009-12-05 01:02:09

+0

按价值,但它会很高兴知道这两个。 – DarthVader 2009-12-05 02:21:36

回答

3

可能不是最好的方式做到这一点,但它的工作原理:

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

a.sort(); 
+0

够好。谢谢。 – DarthVader 2009-12-07 23:53:09

12

我搜索周围类似的解决方案,但我需要排序的字典映射并返回与键值对的有序集合。在未能找到已发布的解决方案后,我将下面的方法放在一起。该方法将字典作为输入,创建一个维护关联的数组,然后使用array.sortOn()对结果数组进行排序,并将排序结果作为数组返回。在下面的例子中,数组中的“key”和“value”字段用于清晰起见,但可以使用任何字段名称。

这个例子假设一个字符串对象作为一个键和一个数字对象作为一个值,尽管当然可以使用任何对象类型,并调整字段参数。

下面的方法也可以用于键排序,而不是使用“key”作为sortOn方法的排序字段,也可以使用不同的排序选项,而不是我在此使用的降序数字排序(AS3 SortOn() documentation)出于示例目的,下面的代码有意不是通用的。

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