如何在flex中跟踪2D数组中重复数据的数量



我有一个数据如下:

Chennai 11  10
Mumbai  12  20
Mumbai  22  40
Calcutta 4  35
Calcutta 3  50
Chennai 13  45
Calcutta 4  55
Mumbai   5  50

我需要得到一个数组,它给出钦奈:2孟买:3加尔各答:3。

怎么得到这个?

遍历数据;并将其保存为关联数组。我会用字典。从概念上讲,如下所示:

var dict :Dictionary = new Dictionary();
for (var x:int; x<your2DArray.length;x++){
  var stringToExamine :String = your2DArray[x][1];
  if(dict.hasOwnProperty(stringToExamine)){
    dict[stringToExamine] ++;
  } else {
    dict[stringToExamine] = 1;
  }
}

现在你说你想要一个数组,所以你必须以某种方式把Dictionary对象转换成一个数组。大概是另一个二维数组。

var newArray :Array = new Array();
var counter :int = 0;
for each (var key :String in dict) 
{ 
    newArray[counter] = [key,dict[key]];
    counter++;
} 

我在浏览器中编写了这段代码;所以它可能有问题。但是,算法应该是可靠的。

第一步是从二维数组中取二维数组的第一列,形成一个单维数组(下例中为"arr")。第二步是形成另一个新的单维数组,删除重复项(在下面的示例中为"dupe")。第三步是在比较两个数组数据的基础上增加一个整数变量,如下所示,最后将整数变量压入另一个新数组。

让我有下面的数组:

 private var arr:Array = new Array('Chennai', 
                'Mumbai',  
                'Mumbai',  
                'Calcutta', 
                'Calcutta', 
                'Chennai',
                'Calcutta', 
                'Mumbai',
                'Kerala',
                'Kerala',
                'Kerala',
                'Kerala',
                'US');
 private var dupe:Array = new Array('Chennai', 
            'Mumbai',  
            'Calcutta',
                                     'Kerala',
             'US');
 var aNewArr:Array = new Array(new Array());
 var repeatedFinalArray:Array = new Array();
 for(var a:int=0; a<dupe.length;a++)
 {
 var count:int=0;
 for(var j:int=0;j<arr.length;j++)
 {
   if(dupe[a]==arr[j])
  {
     count++;
  }
}
aNewArr.push([dupe[a]],[count]);
repeatedFinalArray.push(count);
  }
The output of aNewArr will have:
Chennai,2,Mumbai,3,Calcutta,3,Kerala,4,US,1
and 
repeatedFinalArray will have jus the counts : 2,3,3,4,1

相关内容

  • 没有找到相关文章

最新更新