如何计算二维数组的频率

时间:2013-04-09 04:39:06

标签: java arrays

嗨我试着计算一个二维数组的频率。我试图以某种方式显示频率,例如,如果表格如下:

0:1 2 0

1:2 0 1

2:1 0 2

我希望能够计算频率,如:

0:0 2 1

1:2 0 1

2:1 1 1

所以表的方式应该是第一列中出现的次数为0次,以及第一列中出现的次数是多少次,然后依此类推。

到目前为止我的代码是

    for (int t = 0; t<s;t++)
    {
        int count= 0 ; 
        for (int p = 0; p<s; p++)
        {
            if(table[p][t] ==p )
            {
                count++

            }
            else if(t+1 != s)
                continue;
            else 
                table[p][t] = count; 
                count = 0;
        }
    }

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

对于每列,请创建HashMap<int, int>。密钥将是条目,该值将是该列中的频率,例如,该专栏:

1)迭代该列的元素

2)对于列的每个元素,如果它已经作为键存在于hashmap中,则获取其值,将其递增1并在同一个键下添加新值。如果尚未添加,请添加值1

ArrayList<HashMap<int, int>>包含每列的其中一个。

您还可以保留HashMap<int, int>来计算元素在全球范围内出现的次数。这样,如果要保留每个元素对每个列都有计数的属性,即使该列的计数为0,也可以使用此全局HashMap来完成并在每列中添加键。 H ashMap尚不存在。

HashMap是一种数据结构,允许您将值与每个键相关联,并且您可以添加任意数量的条目,而不像数组,并且条目不必具有连续的键整数。 ArrayList就像一个数组,但您可以添加和删除它以更改其中包含的元素数。

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

答案 1 :(得分:0)

如果您发布的示例是数组总是如此(即唯一可能的值是0,1和2),那么您可以执行以下操作 -

int[][] counts = new int[3][3]; //this inits all the elements to 0
//iterate through all the elements in your source array
for(int row=0; row<source.length; row++) {
    for(int col=0; col<source[row].length; col++) {     
        //just increment the appropriate element of the counts array here       
        counts[col][source[row][col]]++; 
    }
}