Flash AS3 - XMLList - Подсчет повторений элемента в XMLList и отображение результата

У меня есть XMLList «Ключевые слова», который состоит примерно из 30 элементов. Я хочу подсчитать количество уникальных ключевых слов в списке и как часто они встречаются. Затем отобразите 3 самых популярных ключевых слова.

Вероятно, для этого есть простая функция сортировки / подсчета, однако я новичок в as3, поэтому, пожалуйста, простите мою наивность.

Ваше здоровье.


person Dale    schedule 11.04.2010    source источник


Ответы (1)


Я не думаю, что это можно исправить в одну строку.

Я вижу наиболее простой способ сделать это:

  1. Поместите ключевые слова в массив, чтобы их можно было отсортировать. Это приводит к тому, что любое ключевое слово встречается во множестве случаев.

  2. Теперь создайте второй массив для хранения пары ключ-значение для каждого ключевого слова (значение - это количество появлений). Вы можете сделать это, пройдя по первому массиву и изучив каждое значение: либо это начало группы (поэтому добавьте новый объект kv во второй массив), либо это еще одно появление предыдущего ключевого слова (поэтому увеличьте значение счетчика последний объект кв).

  3. Теперь вы можете использовать метод 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]);

Надеюсь, что это работает для вас.

person Richard Inglis    schedule 12.04.2010