Flash AS3 - XMLList - 计算XML列表中元素的出现次数并显示结果

时间:2010-04-11 16:00:02

标签: flash actionscript-3 xmllist

我有一个XMLList'Keywords',它由大约30个元素组成。我想计算列表中唯一关键字的数量,以及它们发生的频率。然后显示前3个最常出现的关键字。

可能有一个简单的排序/计数功能来实现这一点,但是,我对as3很新,所以请原谅我的天真。

干杯。

1 个答案:

答案 0 :(得分:1)

我认为没有针对此的单行修复。

我能看到的最简单的方法如下:

  1. 将关键字放入数组中,以便排序它们。这会导致将任何关键字组合在一起的多次出现。

  2. 现在创建第二个数组来保存每个关键字的键值对(值是出现次数)。您可以通过单步执行第一个数组并检查每个值来执行此操作:要么它是组的开头(所以将新的kv对象添加到第二个数组),要么是前一个关键字的另一个出现(因此增加计数值)最后一个kv对象)。

  3. 现在,您可以在第二个数组上使用 sortOn()方法,按每个关键字的出现次数进行排序。

  4. 代码(这可能需要一些修复 - 怕我的AS3还不是很好,而且我无法测试它......在我的iPhone上写这个!)看起来像这样:

    //put the keywords into an array, and sort them
    var a1:Array=new Array();
    for each (var item in keywords){
    a1.push(item);
    }
    a1.sort();
    
    //make an array to hold a key/value pair for
    //each unique keyword, and how often it occurs
    var a2:Array=new Array();
    var currentKey:String="";
    for each (var item in a1){
    if (item!=currentKey){
    //if we haven't seen this word before,
    //make a new k/v pair with a count of 1
    a2.push({key:item, keyCount:1});
    currentKey=item;    
    } else {
    //otherwise increment count
    a2[a2.length - 1].keyCount++;
    }
    
    //now we can sort the array by keyCount
    a2.sortOn("keyCount", Array:DESCENDING);
    
    trace("3 top words are: ", a2[0], a2[1], a2[2]);
    

    希望这适合你。