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(fruit, "apples"))。しかし、何百、何千もの果物の名前がある場合、すべての果物に新しい変数を書き留めることはできません。

私はAS3にまったく慣れていないので、許してください。コードを理解したいので、コードに明確なコメントを含めてください。

4

1 に答える 1

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
于 2013-05-20T10:39:12.873 に答える