我想知道是否可以使用LINQ进行远程排序,例如我有数字列表:
List< int > numbers = new List< int >
只需使用numbers.Skip(3).Take(4).OrderBy(blabla)
即可,但它会返回一个仅包含这4个数字的新列表。是否有可能强制LINQ自行工作而不返回新的“部分”列表或接收带有已排序部分的完整列表?
谢谢你的回答!
答案 0 :(得分:4)
尝试这样的事情:
var partiallySorted = list.Where(x => x < 11)
.Concat(list.Where(x => x >= 11 && x <=15).OrderBy(/*blah*/)))
.Concat(list.Where(x => x > 15));
答案 1 :(得分: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
答案 2 :(得分:2)
List<int> list = new List<int>() {1,2,3,15,11,13,10,6,7};
list.Sort(3, 4,Comparer<int>.Default);
答案 3 :(得分: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);
答案 4 :(得分:0)
将此用于默认的内联列表排序:
语法: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]排序,或者使用下面的方法确切地使用其他方法,
我按字符数排序了字符串,也从第2个元素到List的结尾排序。
语法:List.Sort(起始索引,元素数量,Custom Comparer)
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)));