我有一个数据如下:
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