C# 过滤列表<;点>;根据给定条件,使用LINQ
一个包含点的通用列表,比如=>C# 过滤列表<;点>;根据给定条件,使用LINQ,c#,linq,C#,Linq,一个包含点的通用列表,比如=>列表 现在我需要根据以下条件过滤点,并使用LINQ将其存储在另一个列表中 •在给定Y时点的值 •查找具有最大X值和最小X值的点 注意: 实际上,朋友们,我正在寻找LINQ查询,如果可能的话,它只在单个查询中执行上述操作 否则,使用LINQ的上述操作的任何最佳解决方案 编辑:- 在这里查看我的代码,但我正在寻找排序解决方案 int givenY = 147; List<Point> listO
列表
现在我需要根据以下条件过滤点,并使用LINQ将其存储在另一个列表中
•在给定Y时点的值
•查找具有最大X值和最小X值的点
注意:
实际上,朋友们,我正在寻找LINQ查询,如果可能的话,它只在单个查询中执行上述操作
否则,使用LINQ的上述操作的任何最佳解决方案
编辑:-
在这里查看我的代码,但我正在寻找排序解决方案
int givenY = 147;
List<Point> listOfPointLocal = (from point in listOfPointMain
where point.Y == givenY
select point).ToList();
var minX = listOfPointLocal.Min(p => p.X);
var maxX = listOfPointLocal.Max(p => p.X);
List<Point> listOfFilterdPoint = (from p in listOfPointLocal
where p.X <= minX || p.X >= maxX
select p).ToList();
int givenY=147;
listOfPointLocal=(从listOfPointMain中的点开始
其中point.Y==givenY
选择点);
var minX=listOfPointLocal.Min(p=>p.X);
var maxX=listOfPointLocal.Max(p=>p.X);
List listOfFilterdPoint=(来自listOfPointLocal中的p
其中p.X=maxX
选择p.ToList();
谢谢….虽然它不会在单个查询中为您提供最小值和最大值X,但以下代码可能对您有用
List<Point> list = new List<Point>();
list.Add(new Point(10, 10));
list.Add(new Point(15, 10));
list.Add(new Point(20, 10));
list.Add(new Point(25, 15));
list.Add(new Point(30, 15));
var minX = (from p in list
where (p.Y.Equals(10))
select p.X).Min();
var maxX = (from p in list
where (p.Y.Equals(10))
select p.X).Max();
Console.WriteLine(minX.ToString());
Console.WriteLine(maxX.ToString());
Console.ReadLine();
List List=新列表();
增加(新的第(10,10)点);
增加(新的第(15,10)点);
增加(新的第(20,10)点);
增加(新的第(25,15)点);
增加(新的第(30,15)点);
var minX=(来自列表中的p
式中(p.Y.等于(10))
选择p.X).Min();
var maxX=(来自列表中的p
式中(p.Y.等于(10))
选择p.X).Max();
Console.WriteLine(minX.ToString());
Console.WriteLine(maxX.ToString());
Console.ReadLine();
这将返回一个结果集,但它仍在对列表进行两次迭代,如果不这样做,您将无法完成此操作,尽管AFAIK
list.Select(a => new
{
Max = list.Where(max => max.Y == ???).Max(max => max.X),
Min = list.Where(min => min.Y == ???).Min(min => min.X)
});
在额外课程的帮助下,你只能通过一次列表
public class MaxMin
{
public int max { get; set; }
public int min { get; set; }
}
然后
var points = new List<Point>()
{
new Point(10, 10),
new Point(15, 10),
new Point(20, 10),
new Point(42, 42),
new Point(47, 11)
};
var maxmin = new MaxMin() { max = int.MinValue, min = int.MaxValue};
maxmin = points.Where(p => p.Y == 10).
Aggregate(maxmin, (acc, next) =>
{
if (next.X > acc.max) acc.max = next.X;
if (next.X < acc.min) acc.min = next.X;
return acc;
});
var points=新列表()
{
新观点(10,10),
新观点(15,10),
新观点(20,10),
新观点(42,42),
新观点(47,11)
};
var maxmin=new maxmin(){max=int.MinValue,min=int.MaxValue};
maxmin=点,其中(p=>p.Y==10)。
聚合(最大最小值,(acc,next)=>
{
如果(next.X>acc.max)acc.max=next.X;
如果(next.X
为了保持可读性:
var points = new List<Point>()
{
new Point(10, 10),
new Point(15, 10),
new Point(20, 10),
new Point(42, 42),
new Point(47, 11)
};
var maxes = new {
minX = (from p in points orderby p.X select p).First(), // with lowest x
maxX = (from p in points orderby p.X select p).Last(), // with highest x
minY = (from p in points orderby p.Y select p).First(), // with lowest y
maxY = (from p in points orderby p.Y select p).Last() // with highest y
};
var points=新列表()
{
新观点(10,10),
新观点(15,10),
新观点(20,10),
新观点(42,42),
新观点(47,11)
};
var maxes=new{
minX=(从p点按p.X顺序选择p)。第一个(),//最小的X
maxX=(从p点按p.X顺序选择p).Last(),//具有最高的X
minY=(按p.Y顺序从p点选择p)。第一个(),//Y值最低
maxY=(按p.Y选择p的顺序从p开始)。最后()//具有最高的Y
};
到目前为止,您有哪些代码?您能发布吗?@Caspar,实际上我还有很长的路要走。首先找到给定y的点,,,然后启动查询,找到具有MinimumX值和MaximumX值的点,,,,实际上我正在寻找在单个LINQ查询中执行上述操作的方法……谢谢……看看您对此有何想法?看起来你在寻找一个现成的解决方案,甚至连自己的脑袋都没有弄清楚。@Aryan SuryaWansi不是一个机械土耳其人。社区渴望帮助那些有特定问题的人,OP愿意展示其改进。不要坐以待毙,请用适当的代码重新表述你的问题。这样你就失去了关于该点在其他列表中排名的所有信息。