如何获取List中的指定条件的值

时间:2022-06-19 15:11:01

PointF p1 = new PointF(300, 6.5f);
PointF p2 = new PointF(400, 5.5f);
PointF p3 = new PointF(500, 3.7f);
PointF p4 = new PointF(600, 2.8f);
List<PointF> list = new List<PointF>();
list.Add(p1);
list.Add(p2);
list.Add(p3);
list.Add(p4);


private List<PointF> GetList(float x)
{
}
给出x=300-600之间的任意数字,要获取x在哪两组PointF之间。
例如x=450,返回PointF(400, 5.5f) 和PointF(500, 3.7f)放在List里。
        x=300就返回PointF(300, 6.5f)和PointF(400, 5.5f)放在List里。
        x=600就返回PointF(500, 3.7f)和 PointF(600, 2.8f)放在List里。

11 个解决方案

#1


linq : linq to obj

#2


不太会linq, 求具体实现代码 如何获取List中的指定条件的值

#3


List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

#4


List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;

#5


引用 4 楼 hrabeyond 的回复:
List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

#6


引用 4 楼 hrabeyond 的回复:
List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

#7


引用 4 楼 hrabeyond 的回复:
List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

#8


引用 7 楼 QQ8772357 的回复:
Quote: 引用 4 楼 hrabeyond 的回复:

List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

确定你的PointF的X不能重复的话,使用listPoint.Distinct();操作。

#9


引用 7 楼 QQ8772357 的回复:
Quote: 引用 4 楼 hrabeyond 的回复:

List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

确定你的PointF的X不能重复的话,使用listPoint.Distinct();操作。

#10


引用 7 楼 QQ8772357 的回复:
Quote: 引用 4 楼 hrabeyond 的回复:

List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

确定你的PointF的X不能重复的话,使用listPoint.Distinct();操作。

#11


	   var test = list.OrderBy(a => a.X);
   if(!string.IsNullOrEmpty(textBox1.Text))
   {
var t = (from p in test where p.X >float.Parse(textBox1.Text) select p).FirstOrDefault();
MessageBox.Show("上一条和等于这一条:" + t);
var t1 = (from p in test where p.X <= float.Parse(textBox1.Text) select p).OrderByDescending(x => x.X).FirstOrDefault();
MessageBox.Show("下一条:" + t1);

   }

大体这样做

#1


linq : linq to obj

#2


不太会linq, 求具体实现代码 如何获取List中的指定条件的值

#3


List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

#4


List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;

#5


引用 4 楼 hrabeyond 的回复:
List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

#6


引用 4 楼 hrabeyond 的回复:
List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

#7


引用 4 楼 hrabeyond 的回复:
List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

#8


引用 7 楼 QQ8772357 的回复:
Quote: 引用 4 楼 hrabeyond 的回复:

List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

确定你的PointF的X不能重复的话,使用listPoint.Distinct();操作。

#9


引用 7 楼 QQ8772357 的回复:
Quote: 引用 4 楼 hrabeyond 的回复:

List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

确定你的PointF的X不能重复的话,使用listPoint.Distinct();操作。

#10


引用 7 楼 QQ8772357 的回复:
Quote: 引用 4 楼 hrabeyond 的回复:

List<PointF> newList=new List<PointF>();
newList.add(list.last(i=>i.存300的那个字段<=x));
newList.add(list.first(i=>i.存300的那个字段>=x));

using system.linq;


谢谢大神回复,如果x=600的话,会返回两条一样的PointF(600, 2.8f), 我想要的是600跟他相邻的那个字段

确定你的PointF的X不能重复的话,使用listPoint.Distinct();操作。

#11


	   var test = list.OrderBy(a => a.X);
   if(!string.IsNullOrEmpty(textBox1.Text))
   {
var t = (from p in test where p.X >float.Parse(textBox1.Text) select p).FirstOrDefault();
MessageBox.Show("上一条和等于这一条:" + t);
var t1 = (from p in test where p.X <= float.Parse(textBox1.Text) select p).OrderByDescending(x => x.X).FirstOrDefault();
MessageBox.Show("下一条:" + t1);

   }

大体这样做