2

我想知道是否可以使用 LINQ 进行范围排序,例如我有数字列表:

List< int > numbers = new List< int >

  • 1
  • 2
  • 3
  • 15 <-- 排序
  • 11 <-- 排序
  • 13 <-- 排序
  • 10 <-- 排序
  • 6
  • 7
  • 等等

简单地使用numbers.Skip(3).Take(4).OrderBy(blabla)就可以了,但它会返回一个只包含这 4 个数字的新列表。是否有可能强制 LINQ 在不返回新的“部分”列表或接收带有排序部分的完整列表的情况下自行工作?感谢您的任何回答!

4

5 回答 5

6

尝试这样的事情:

var partiallySorted = list.Where(x => x < 11)
                 .Concat(list.Where(x => x >= 11 && x <=15).OrderBy(/*blah*/)))
                 .Concat(list.Where(x => x > 15));
于 2012-10-13T19:29:08.813 回答
4
List<int> list = new List<int>() {1,2,3,15,11,13,10,6,7};
list.Sort(3, 4,Comparer<int>.Default);
于 2012-10-13T17:20:21.983 回答
2

只需根据某些标准获取所需的范围,然后使用 Linq 对结果范围应用排序。

List<int> numbers = new List<int>() { 15, 4, 1, 3, 2, 11, 7, 6, 12, 13 };
var range = numbers.Skip(3).Take(4).OrderBy(n => n).Select(s => s);
// output: 2, 3, 7, 11
于 2012-10-13T17:08:40.630 回答
1

将此用于默认内联列表排序:

语法:List.Sort(起始索引,元素数,默认比较器)

List<int> numbers = new List<int> { 1, 2, 3, 15, 11, 13, 10, 6, 7 };
numbers.Sort(3, 6, Comparer<int>.Default);

如果您想按元素的 [properties/attributes] 或其他东西进行排序,请使用以下方法,

我已经按字符数对字符串进行了排序,并且还从第二个元素到列表的末尾。

语法:List.Sort(开始索引,元素个数,自定义比较器)

List<string> str = new List<string> { "123", "123456789", "12", "1234567" };
str.Sort(1, str.Count - 1, Comparer<string>.Create((x, y) => x.Length.CompareTo(y.Length)));
于 2018-04-07T19:53:44.840 回答
0

不,Linq 扩展方法永远不会修改底层列表。您可以使用该方法List<T>.Sort(int index, int counter, IComparer<T> comparer)进行就地排序:

var list = new List<int> {1, 2, 3, 15, 11, 13, 10, 6, 7};
list.Sort(3, 4, null);
于 2012-10-13T17:31:06.797 回答