Flash AS3 - XMLList - Подсчет вхождений элемента в XMLList и отображение результата - PullRequest
1 голос
/ 11 апреля 2010

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

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

Приветствие.

1 Ответ

1 голос
/ 12 апреля 2010

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

Самый простой способ сделать это заключается в следующем:

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

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

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

...