矩阵元素比较

时间:2014-10-02 08:43:37

标签: c# matrix

我对矩阵元素的比较有一些问题。这是代码:

int coll = 0;
for (int i = 0; i < 9; i++)
{
    for (int j = 0; j < 9; j++)
    {
        int tmp = 0;
        for (int k = 0; k < 9; k++)
        {
            if (matrix[i, j] == matrix[i, k])
            {
                tmp++;
                Console.WriteLine("{0},{1} coll {2},{3}-al", i, j, i, k);
            }
            coll += tmp;
        }

    }
}

代码想要比较名为matrix的数组的元素。当列中的2个元素相同时,我将增加tmp值。最后coll将增加数组实际元素的冲突数。问题是程序只能找到元素与自身的碰撞。例如,对于像

这样的矩阵
1234
1342
2341
2413

0:0位置仅与自身发生碰撞而不与1:0发生碰撞。谁能告诉我为什么?

1 个答案:

答案 0 :(得分:0)

尝试这个逻辑:

class Program
{
    static void Main(string[] args)
    {
        int[,] matrix=new int[,] {
            { 1, 2, 3, 4 },
            { 1, 3, 4, 2 },
            { 2, 3, 4, 1 },
            { 2, 4, 1, 3 } };

        // This returns the #of collisions in each column
        Debug.WriteLine(CheckColumn(matrix, 0));    // 2
        Debug.WriteLine(CheckColumn(matrix, 1));    // 1
        Debug.WriteLine(CheckColumn(matrix, 2));    // 1
        Debug.WriteLine(CheckColumn(matrix, 3));    // 0
    }

    static int CheckColumn(int[,] matrix, int column)
    {
        int[] data=new int[matrix.GetLength(0)];
        for(int i=0; i<data.Length; i++)
        {
            data[i]=matrix[i, column];
        }
        var hist=data.GroupBy(i => i)
            .OrderByDescending(g => g.Count())
            .Select(g => new { Num=g.Key, Dupes=g.Count()-1 })
            .Where(h=>h.Dupes>0);

        return hist.Count()>0?hist.Sum(h=>h.Dupes):0;
    }
}

我使用了来自https://stackoverflow.com/a/10335326/380384

的代码