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

时间:2018-01-22 16:59:15

标签: c# .net sorting

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

MyList.Sort();

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

这样的事情:

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

6 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

答案 2 :(得分:1)

您可以使用linq查询

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

请注意x > 50 && x < 30与任何项目都不匹配。所以你可能想写

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

这将删除30以下且大于50

的任何项目

答案 3 :(得分:1)

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

List<int> MyList = ....

// sort
MyList.Sort();

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

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

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

请注意,我认为您的条件是拼写错误,没有数字i < 30 && i > 50

答案 4 :(得分:1)

嗨,你可以像下面那样

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

您不需要对列表进行排序,也可以为您执行此操作

答案 5 :(得分:0)

此版本适用于.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();