約 30 の要素で構成される XMLList 'Keywords' があります。リスト内の一意のキーワードの数と、それらがどのくらいの頻度で発生するかをカウントしたいと考えています。次に、最も出現頻度の高い上位 3 つのキーワードを表示します。
おそらくこれを実行するための単純なソート/カウント機能がありますが、私は as3 にまったく慣れていないので、私の素朴さを許してください。
乾杯。
約 30 の要素で構成される XMLList 'Keywords' があります。リスト内の一意のキーワードの数と、それらがどのくらいの頻度で発生するかをカウントしたいと考えています。次に、最も出現頻度の高い上位 3 つのキーワードを表示します。
おそらくこれを実行するための単純なソート/カウント機能がありますが、私は as3 にまったく慣れていないので、私の素朴さを許してください。
乾杯。
これを1行で修正できるとは思いません。
これを行う最も簡単な方法は次のとおりです。
並べ替えができるように、キーワードを配列に入れます。これにより、グループ化されたキーワードが複数回出現することになります。
次に、各キーワードのキーと値のペアを保持する 2 番目の配列を作成します (値は出現回数です)。これを行うには、最初の配列をステップ実行して各値を調べます。グループの開始 (新しい kv オブジェクトを 2 番目の配列に追加) か、前のキーワードの別の発生 (つまり、最後の kv オブジェクト)。
これで、2 番目の配列で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]);
これがうまくいくことを願っています。