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

问题描述 投票:0回答:6

我正在使用通用列表的.net排序方法。例如:

MyList.Sort();

是否可以使用.net对包含最小值和最大值的列表进行排序?例如,如果我想对列表进行排序,同时仅显示小于“value1”但大于“value2”的列表项。

像这样的东西:

MyList.Sort.Where(MyList > 50 & MyList < 30);
c# .net sorting
6个回答
2
投票

您可以使用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

请注意,原始列表MyList不会更改,而是将结果分配给新变量。此外,操作将被推迟,直到您对结果执行某些操作,如调用ToList或枚举它。


1
投票

我认为你的例子将产生零结果,因为没有大于50且小于30.但假设这只是一个错字,这就是你所追求的吗?

 List<int> s = new List<int>();
 s.Where(r => r > 50 && r < 30).OrderBy(r => r);

1
投票

嗨,你可以像下面这样

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

您无需对列表进行排序,orderby将为您执行此操作


1
投票

对列表进行排序后,可以使用LINQ对其进行过滤。在你的情况下,SkipWhileTakeWhile似乎很有用:

List<int> MyList = ....

// sort
MyList.Sort();

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

我不确定(意思是我没有测试),但我猜大多数时候先过滤然后排序会更快,因此必须对更少的元素进行排序。您可以使用LINQ的WhereOrderBy

List<int> MyList = ....
var result = MyList.Where(i => i > 30 && i < 50).OrderBy(i => i).ToList();

请注意,我认为你的条件是一个错字,没有数字qazxsw poi。


1
投票

您可以使用linq查询

i < 30 && i > 50

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

x > 50 && x < 30

这将删除30以下且大于50的任何项目


0
投票

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

MyList.Where(x => x > 30 && x < 50).OrderBy(x => x);
© www.soinside.com 2019 - 2024. All rights reserved.