筛选器列表<;要点>;根据使用LINQ的给定条件
本文关键字:LINQ 条件 列表 lt 要点 筛选 gt | 更新日期: 2023-09-27 17:59:47
一个包含点的通用列表,比如=>List<Point>
现在我需要过滤点,并根据下面的条件和使用LINQ将其存储在另一个List<Point>
中。
•在给定点的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();
在一个额外类的帮助下,您只能传递一次列表。
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 = 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
};
虽然它不会在单个查询中为您提供最小值和最大值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();
这将返回一个结果集,但它仍在迭代列表两次,如果没有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)
});