2013-05-20 2 views
2

Я хочу подсчитать количество встречных событий в массиве в ActionScript 3.0. Скажем, у меня естьПодсчет количества событий в массиве

var item:Array = ["apples", "oranges", "grapes", "oranges", "apples", "grapes"]; 

Как я могу заставить его показывать количество соответствующих строк? Так, например, результат: яблоки = 2, апельсины = 2 и т.д.

Я получил этот код из другого аналогичного вопроса:

private function getCount(fruitArray:Array, fruitName:String):int { 
    var count:int=0; 
    for (var i:int=0; i<fruitArray.length; i++) { 
     if(fruitArray[i].toLowerCase()==fruitName.toLowerCase()) { 
      count++; 
     } 
    } 
    return count; 
} 

var fruit:Array = ["apples", "oranges", "grapes", "oranges", "apples", "grapes"]; 
var appleCount=getCount(fruit, "apples"); //returns 2 
var grapeCount=getCount(fruit, "grapes"); //returns 2 
var orangeCount=getCount(fruit, "oranges"); //returns 2 

В этом коде, если вы хотите, чтобы получить количество, скажем, «яблоко» , Вам нужно настроить переменные для каждого элемента (var appleCount = getCount (фрукты, «яблоки»)). Но что, если у вас есть сотни и тысячи имен фруктов, невозможно записать новые переменные для каждого фрукта.

Я совершенно новый для AS3, так что простите меня. Пожалуйста, добавьте четкие комментарии в свой код, чтобы понять код.

ответ

10
var item:Array = ["apples", "oranges", "grapes", "oranges", "apples", "grapes"]; 

    //write the count number of occurrences of each string into the map {fruitName:count} 
    var fruit:String; 
    var map:Object = {}; //create the empty object, that will hold the values of counters for each fruit, for example map["apples"] will holds the counter for "apples" 

    //iterate for each string in the array, and increase occurrence counter for this string by 1 
    for each(fruit in item) 
    { 
     //first encounter of fruit name, assign counter to 1 
     if(!map[fruit]) 
      map[fruit] = 1; 
     //next encounter of fruit name, just increment the counter by 1 
     else 
      map[fruit]++; 
    } 

    //iterate by the map properties to trace the results 
    for(fruit in map) 
    { 
     trace(fruit, "=", map[fruit]); 
    } 

выход:

apples = 2 
grapes = 2 
oranges = 2 
+0

ThankYou! :) работал как шарм. Но, пожалуйста, объясните, что делает каждый код и как? (Извините, я новичок и пытаюсь учиться) – rohan

Смежные вопросы