Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 过滤列表<;点>;根据给定条件,使用LINQ_C#_Linq - Fatal编程技术网

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愿意展示其改进。不要坐以待毙,请用适当的代码重新表述你的问题。这样你就失去了关于该点在其他列表中排名的所有信息。