Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash AS3-XMLList-计算XMLList中元素的发生次数并显示结果_Flash_Actionscript 3_Xmllist - Fatal编程技术网

Flash AS3-XMLList-计算XMLList中元素的发生次数并显示结果

Flash AS3-XMLList-计算XMLList中元素的发生次数并显示结果,flash,actionscript-3,xmllist,Flash,Actionscript 3,Xmllist,我有一个XMLList“关键字”,它由大约30个元素组成。我想计算列表中唯一关键字的数量,以及它们出现的频率。然后显示前3个最常见的关键字 可能有一个简单的排序/计数函数来实现这一点,但是,我对as3还很陌生,所以请原谅我的天真 干杯。我不认为这是一个单行修复 我能看到的最直接的方法如下: 将关键字放入数组中,以便对其进行排序。这会导致任何关键字组合在一起时多次出现 现在,创建第二个数组来保存每个关键字的键值对(该值是发生次数)。可以通过单步遍历第一个数组并检查每个值来实现这一点:要么它是组的开

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

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


干杯。

我不认为这是一个单行修复

我能看到的最直接的方法如下:

  • 将关键字放入数组中,以便对其进行排序。这会导致任何关键字组合在一起时多次出现

  • 现在,创建第二个数组来保存每个关键字的键值对(该值是发生次数)。可以通过单步遍历第一个数组并检查每个值来实现这一点:要么它是组的开始(因此将新的k-v对象添加到第二个数组),要么它是前一个关键字的另一个出现(因此增加最后一个k-v对象的计数值)

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

  • 代码(这可能需要一些修正-恐怕我的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]);
    

    希望这对你有用。

    我不认为这是一个单行修复程序

    我能看到的最直接的方法如下:

  • 将关键字放入数组中,以便对其进行排序。这会导致任何关键字组合在一起时多次出现

  • 现在,创建第二个数组来保存每个关键字的键值对(该值是发生次数)。可以通过单步遍历第一个数组并检查每个值来实现这一点:要么它是组的开始(因此将新的k-v对象添加到第二个数组),要么它是前一个关键字的另一个出现(因此增加最后一个k-v对象的计数值)

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

  • 代码(这可能需要一些修正-恐怕我的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]);
    
    希望这对你有用