我正在使用通用列表的.net排序方法。例如:
MyList.Sort();
是否可以使用.net对包含最小值和最大值的列表进行排序?例如,如果我想对列表进行排序,同时仅显示小于“value1”但大于“value2”的列表项。
这样的事情:
MyList.Sort.Where(MyList > 50 & MyList < 30);
答案 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对其进行过滤。在您的情况下,SkipWhile
和TakeWhile
似乎很有用:
List<int> MyList = ....
// sort
MyList.Sort();
// filter:
var result = MyList.SkipWhile(i => i < 30).TakeWhile(i => i < 50).ToList();
我不确定(意思是我没有测试过),但我猜大多数时候首先过滤和排序后更快,因此必须对更少的元素进行排序。您可以使用LINQ&#39; Where
和OrderBy
:
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();