我有一个XMLList'Keywords',它由大约30个元素组成。我想计算列表中唯一关键字的数量,以及它们发生的频率。然后显示前3个最常出现的关键字。
可能有一个简单的排序/计数功能来实现这一点,但是,我对as3很新,所以请原谅我的天真。
干杯。
答案 0 :(得分:1)
我认为没有针对此的单行修复。
我能看到的最简单的方法如下:
将关键字放入数组中,以便排序它们。这会导致将任何关键字组合在一起的多次出现。
现在创建第二个数组来保存每个关键字的键值对(值是出现次数)。您可以通过单步执行第一个数组并检查每个值来执行此操作:要么它是组的开头(所以将新的kv对象添加到第二个数组),要么是前一个关键字的另一个出现(因此增加计数值)最后一个kv对象)。
现在,您可以在第二个数组上使用 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]);
希望这适合你。