我有一个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而没有循环
请帮忙
答案 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);
}