2010-04-11 2 views
1

У меня есть XMLList 'Keywords', который состоит из 30 элементов. Я хочу подсчитать количество уникальных ключевых слов в Списке и как часто они встречаются. Затем отобразите 3 самых популярных ключевых слова.Flash AS3 - XMLList - подсчет событий элемента в XMLList и отображение результата

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

Cheers.

ответ

1

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

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

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

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

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