C# 在C中创建对类型(值、值)的列表#
我想创建一些int值的一对列表,如 (3,4)、(5,4)、(5,1)…(n,n) 然后将每个目标与单个目标匹配,如 (1,1) 我需要将列表的每个值与目标(1,1)进行比较,以便它打印到距离(1,1)最近的点 预期结果。 (3,4) 最近的是什么 最近的意思是,假设我们有数字4,5,6,7,8,我想找到最接近12的数字,所以答案是8,因为需要4才能达到12,但4+n从另一个移动到12,所以以同样的方式不同于单个值,我有一对值(n,n)。。。。并与(n,n)进行比较 我尝试使用2D阵列的内容C# 在C中创建对类型(值、值)的列表#,c#,arrays,loops,C#,Arrays,Loops,我想创建一些int值的一对列表,如 (3,4)、(5,4)、(5,1)…(n,n) 然后将每个目标与单个目标匹配,如 (1,1) 我需要将列表的每个值与目标(1,1)进行比较,以便它打印到距离(1,1)最近的点 预期结果。 (3,4) 最近的是什么 最近的意思是,假设我们有数字4,5,6,7,8,我想找到最接近12的数字,所以答案是8,因为需要4才能达到12,但4+n从另一个移动到12,所以以同样的方式不同于单个值,我有一对值(n,n)。。。。并与(n,n)进行比较 我尝试使用2D阵列的内容 p
positions = new int[3][,]
{
new int[,] { {3,4} },
new int[,]{ {5,4}},
new int[,] { {5,1} }
};
这给了我
3,4
5,4
5,1
现在,我需要将每个值与(1,1)进行比较,但我不知道有什么合适的数据结构可以方便地存储列表,并将每个值与(1,1)进行比较
请帮助C#7有元组,我想你正在寻找它
例如,元组列表:
var位置=新列表
{
(3,4),
(5,4),
(5,1)
};
您可以找到“最近的”,例如:
(int x, int y) value = (1, 1);
var closest = positions.OrderBy(p => (p.x - value.x) + (p.y - value.y)).First(); // finds (5,1)
我假设这些点是平面上的点,我们可以用它们来计算两点之间的距离 有了这个假设,我将创建一个新类来保存x/y位置数据和一个运行
毕达哥拉斯定理的DistanceBetween
方法
static void Main(string[] args)
{
List<Point> points = new List<Point>
{
new Point(3, 4),
new Point(5, 4),
new Point(5, 1)
};
Point closestPoint = points.OrderBy(point => point.DistanceFromPoint(new Point(1, 1))).FirstOrDefault();
Console.WriteLine($"The closest point to 1,1 is {closestPoint.PosX},{closestPoint.PosY}");
Console.ReadLine();
}
private class Point
{
public Point(int posX, int posY)
{
PosX = posX;
PosY = posY;
}
public int PosX { get; set; }
public int PosY { get; set; }
public double DistanceFromPoint(Point otherPoint)
{
return Math.Sqrt(Math.Pow((otherPoint.PosX - PosX), 2) + Math.Pow((otherPoint.PosY - PosY), 2));
}
}
static void Main(字符串[]args)
{
列表点=新列表
{
新观点(3,4),
新的点(5,4),
新观点(5,1)
};
Point closestPoint=points.OrderBy(Point=>Point.DistanceFromPoint(新点(1,1))).FirstOrDefault();
WriteLine($“距离1,1最近的点是{closestPoint.PosX},{closestPoint.PosY}”);
Console.ReadLine();
}
私人班点
{
公共点(int-posX,int-posY)
{
PosX=PosX;
PosY=PosY;
}
公共int PosX{get;set;}
公共int PosY{get;set;}
公共双距离起点(点其他点)
{
返回Math.Sqrt(Math.Pow((otherPoint.PosX-PosX),2)+Math.Pow((otherPoint.PosY-PosY),2));
}
}
什么是“将每个值与(1,1)
进行比较”?(5,1)
是否只匹配(1,1)
?不,我必须找到1,1的最小点,所以前3,4与1,1比较,并将3,4设置为比5,4最小的点,依此类推……那么最后最接近的点将是3,4“最近”是什么意思?你们只是比较了第一个数字吗?请回顾一下问题,我已经更新了这个上下文中最近的定义,为什么最近不是(5,1)?我认为这也很好(我怀疑“own”类和元组),因为我假设它们是几何点,在方法中包含公式比在linq:)中包含公式更容易。但你的工作也很出色