C#.NET排序方法(过滤最小值和最大值)

C#.NET排序方法(过滤最小值和最大值),c#,.net,sorting,C#,.net,Sorting,我对泛型列表使用.net排序方法。例如: MyList.Sort(); 是否可以使用.net对列表进行排序,同时考虑最小值和最大值?例如,如果我想对列表进行排序,同时只显示小于“value1”但大于“value2”的列表项 大概是这样的: MyList.Sort.Where(MyList > 50 & MyList < 30); MyList.Sort.Where(MyList>50&MyListr>50&&rr); 我认为您的示例将产生零结果,因为没有任何结果大于50且

我对泛型列表使用.net排序方法。例如:

MyList.Sort();
是否可以使用.net对列表进行排序,同时考虑最小值和最大值?例如,如果我想对列表进行排序,同时只显示小于“value1”但大于“value2”的列表项

大概是这样的:

MyList.Sort.Where(MyList > 50 & MyList < 30);
MyList.Sort.Where(MyList>50&MyList<30);

我认为您的示例将产生零结果,因为没有任何结果大于50且小于30。但假设那只是一个打字错误,这就是你想要的吗

 List<int> s = new List<int>();
 s.Where(r => r > 50 && r < 30).OrderBy(r => r);
List s=新列表();
s、 式中(r=>r>50&&r<30).OrderBy(r=>r);

我认为您的示例将产生零结果,因为没有任何结果大于50且小于30。但假设那只是一个打字错误,这就是你想要的吗

 List<int> s = new List<int>();
 s.Where(r => r > 50 && r < 30).OrderBy(r => r);
List s=新列表();
s、 式中(r=>r>50&&r<30).OrderBy(r=>r);

您可以使用Linq扩展

// top of code file
using System.Linq;

// code
var filteredSortedList = MyList.Where(x => x > 30 && x < 50).OrderBy(x => x);
// filters values between 30 and 50 not inclusive
// sorts the results
//代码文件的顶部
使用System.Linq;
//代码
var filteredSortedList=MyList.Where(x=>x>30&&x<50).OrderBy(x=>x);
//过滤介于30和50之间的值(不包括在内)
//对结果进行排序

请注意,原始列表MyList没有更改,而是将结果分配给一个新变量。此外,在对结果执行某些操作(如调用ToList或枚举)之前,操作将被延迟。

您可以使用Linq扩展

// top of code file
using System.Linq;

// code
var filteredSortedList = MyList.Where(x => x > 30 && x < 50).OrderBy(x => x);
// filters values between 30 and 50 not inclusive
// sorts the results
//代码文件的顶部
使用System.Linq;
//代码
var filteredSortedList=MyList.Where(x=>x>30&&x<50).OrderBy(x=>x);
//过滤介于30和50之间的值(不包括在内)
//对结果进行排序

请注意,原始列表MyList没有更改,而是将结果分配给一个新变量。此外,在对结果执行某些操作(如调用ToList或枚举)之前,操作将被延迟。

您可以使用linq查询来完成此操作

MyList = MyList
  .Where(x => x > 50 && x < 30)
  .OrderBy(x => x)
  .ToList();
MyList=MyList
其中(x=>x>50&&x<30)
.OrderBy(x=>x)
.ToList();
请注意,
x>50&&x<30
将不匹配任何项目。所以你可能想写

MyList.Where(x => x > 30 && x < 50).OrderBy(x => x);
MyList.Where(x=>x>30&&x<50).OrderBy(x=>x);

这将删除任何低于30且大于50的项,您可以使用linq查询

MyList = MyList
  .Where(x => x > 50 && x < 30)
  .OrderBy(x => x)
  .ToList();
MyList=MyList
其中(x=>x>50&&x<30)
.OrderBy(x=>x)
.ToList();
请注意,
x>50&&x<30
将不匹配任何项目。所以你可能想写

MyList.Where(x => x > 30 && x < 50).OrderBy(x => x);
MyList.Where(x=>x>30&&x<50).OrderBy(x=>x);

这将删除任何低于30且大于50的项。在对列表进行排序后,您可以使用LINQ对其进行筛选。在您的情况下,
SkipWhile
TakeWhile
似乎很有用:

List<int> MyList = ....

// sort
MyList.Sort();

// filter:
var result = MyList.SkipWhile(i => i < 30).TakeWhile(i => i < 50).ToList();


请注意,我假设您的条件是一个输入错误,没有编号
I<30&&I>50

对列表排序后,可以使用LINQ对其进行筛选。在您的情况下,
SkipWhile
TakeWhile
似乎很有用:

List<int> MyList = ....

// sort
MyList.Sort();

// filter:
var result = MyList.SkipWhile(i => i < 30).TakeWhile(i => i < 50).ToList();


请注意,我假设您的条件是一个键入,没有数字
I<30&&I>50

Hi您可以如下所示

var res = MyList.Where(val => val > minVal && val < maxVal).OrderBy(num=>num).ToList();
var res=MyList.Where(val=>val>minVal&&valnum.ToList();

您不需要对列表进行排序,orderby将为您进行排序

您好,您可以执行以下操作

var res = MyList.Where(val => val > minVal && val < maxVal).OrderBy(num=>num).ToList();
var res=MyList.Where(val=>val>minVal&&valnum.ToList();

您不需要对列表进行排序,orderby将为您进行排序

此版本应适用于大多数.net平台版本

    System.Collections.Generic.List<int> items = new List<int>();
    Predicate<int> FilterMethod = delegate (int item) { return item < 50 && item > 30; };
    items.FindAll(FilterMethod).Sort();
System.Collections.Generic.List items=new List();
谓词筛选器方法=委托(int项){返回项<50&&item>30;};
items.FindAll(FilterMethod.Sort();

此版本应适用于大多数.net平台版本

    System.Collections.Generic.List<int> items = new List<int>();
    Predicate<int> FilterMethod = delegate (int item) { return item < 50 && item > 30; };
    items.FindAll(FilterMethod).Sort();
System.Collections.Generic.List items=new List();
谓词筛选器方法=委托(int项){返回项<50&&item>30;};
items.FindAll(FilterMethod.Sort();

什么是只显示列表项…的意思?是否要删除范围之外的?是否要创建子集?如何回答?回答时请澄清OP在寻找什么,考虑基于你的理解的问题。到目前为止,还不清楚预期输出是什么(即,{1,37,35100}->{35,37}或{1100}或{1,35,37100}或{1,35,37100}+打印35,37)。什么是
仅显示列表项…
的意思?是否要删除范围之外的?是否要创建子集?如何回答?回答时请澄清OP在寻找什么,考虑基于你的理解的问题。到目前为止,还不清楚预期的输出是什么(即{1,37,35100}->{35,37}或{1100}或{1,35,37100}或{1,35,37100}+打印35,37)。值得注意的是,这个表达式并没有改变原始列表。您希望使用该表达式的返回值。值得注意的是,该表达式不会更改原始列表。您想使用该表达式的返回值。为什么不同时使用
.OrderBy(@object=>@object)
使其更容易混淆:)确实没有很好的理由将
var
用作var名称(即使语法上完全可以接受)@Maddy:我想Alexei是想说明一点,即有一个名为
var
的局部变量可能会引起混淆。我必须承认我认为这是非法的,但显然不是。@Chris:谢谢你的解释,你可以使用任何变量名。我习惯于在大多数情况下使用var变量名bad@Maddy:没问题。有时,如果您还没有看到问题,那么更为间接的评判答案的方法可能会有点难以理解。为什么不也使用
。OrderBy(@object=>@object)
使其更为混乱:)真的没有很好的理由将
var
用作var名称(即使语法完全可以接受)@Maddy:我想Alexei是想说明一点,即有一个名为
var
的局部变量具有潜在的