0

我有一个数据如下:

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

我需要得到一个数组,它给出了 chennai:2 mumbai:3 calcutta:3。

如何得到这个?

4

2 回答 2

1

循环数据;并将其保存为关联数组。我会使用字典。从概念上讲,像这样:

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++;
} 

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

于 2013-05-30T13:18:15.733 回答
0

第一步是从二维数组中获取二维数组的第一列,形成一个一维数组(下例中的“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
于 2013-05-31T11:49:47.280 回答