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