找到坐标计数所需的帮助

时间:2011-06-27 05:26:46

标签: c#

我有一个8×8矩阵。现在,以下坐标被占用

{ 6, 3 }, { 5, 5 }, { 3, 3 }....需要做的是,我需要建立直线

通过这些点并需要计算他们触摸了多少个坐标?

到目前为止我的计划是

private static void GetCount(int[,] Positions)
{

    int rcount = 8;
    int firstRow = Positions[0, 0];            

    for (int i = 1; i < Positions.Length/2; i++)
    {              
       int currentRow = Positions[i, 0];
       if (currentRow != firstRow)
        {
          rcount += 8;
          firstRow = currentRow;
        }      
     }

     int cCount = 8;
     int firstCol = Positions[0, 1];

     for (int i = 1; i < Positions.Length / 2; i++)
     {


        int currentCol = Positions[i, 1];
        if (currentCol != firstCol)
        {
            cCount += 8;
            firstCol = currentCol;
         }

      }
     int totalCount = rcount - cCount;
     Console.WriteLine(totalCount);

}

我正在调用它

GetCount(new int[,] { { 6, 3 }, { 5, 5 }, { 3, 3 } });

这里的输出为40。 (对于每3个唯一行,计数将为24,即6,5,3,对于2个唯一列,计数将为16,即3和5 ......因此,总计数为24 + 16 = 40) 但我得到的输出为48.

还可以使用一个循环来执行porgram吗?

我正在使用C#1.0

被修改

这确实有效

List<int> lstRows = new List<int>();
            List<int> lstCols = new List<int>();
            int count = 0;

            //Get the unique rows and columns
            for (int i = 0; i < marinePositions.Length / 2; i++)
            {
                if (!lstRows.Contains(marinePositions[i, 0])) lstRows.Add(Positions[i, 0]);
                if (!lstCols.Contains(marinePositions[i, 1])) lstCols.Add(Positions[i, 1]);
            }
            //get row count
            for (int i = 0; i < lstRows.Count; i++) count += 8;
            //get column count
            for (int i = 0; i < lstCols.Count; i++) count += 8;

            Console.WriteLine(count);

但需要一个更好的...如果可能的话使用linq / lambda而没有循环

请帮忙

2 个答案:

答案 0 :(得分:0)

更正:

1 -

int cCount = 8;

要:

int cCount = 0;

2 -

int totalCount = rcount - cCount;

要:

int totalCount = rcount + cCount;

该程序现在应该可以正常工作。

答案 1 :(得分:0)

这里你去......但是这是LINQ而不是C#1.0,​​这太老了..不确定你为什么要使用这种旧版本的语言:

        private static void GetCount(int[,] Positions)
        {
            List<int> x = new List<int>();
            List<int> y = new List<int>();
            for (int i = 0; i < Positions.Length/2; i++)
            {
                x.Add(Positions[i, 0]);
                y.Add(Positions[i, 1]);
            }
            int result = (x.Distinct().Count() * 8) + (y.Distinct().Count() * 8);
            Console.WriteLine(result);
        }

没有循环魔术:

    private static void GetCount(int[,] Positions)
    {
        var range = Enumerable.Range(0, Positions.Length / 2);
        var result = (range.Select(i => Positions[i, 0]).Distinct().Count() * 8) +
                     (range.Select(i => Positions[i, 1]).Distinct().Count() * 8);
        Console.WriteLine(result);

    }