[英]How can i sort List<string> by digits lowest to highest when the digits are part of the strings?
[英]How can I sort just part of a huge list using .NET?
在.NET中,泛型列表具有接受IComparer
或Comparison
的排序功能。 我想只列出一份清單的一部分。 希望我可以指定起始索引,要排序的元素數和lambda函數。 看起來如果要對整個列表進行排序,只能使用lambda函數來執行此操作。 這是對的還是我錯過了什么?
其他要求:
List<int> mylist = new List<int>() {8,4,6,2,1,5,3,1,7};
List<int> myRange = mylist.GetRange(2,4);
mylist.RemoveRange(2, 4);
mylist.InsertRange(2, myRange.OrderBy(i => i));
mylist.Dump();
編輯:將Dump
視為在列表中運行foreach
並將其打印到控制台。
這正在改變原始列表的內容。
EDIT2:看看這段代碼是否有用
List<int> mylist = new List<int>() ;
for(int i=9999999; i > 0; i--)
{
mylist.Add(i);
}
Console.WriteLine("start " + DateTime.Now.Ticks);
var extract = mylist.Skip(10).Take(1000000).OrderBy(i => i);
int k = 10; // start from (because we skipped from 10 onwards above)
foreach(int item in extract)
{
mylist[k++] = item;
}
Console.WriteLine("done" + DateTime.Now.Ticks);
foreach(int item in mylist)
Console.WriteLine(item);
您可以提取子列表,然后將其復制回而不是RemoveRange
和InsertRange
。 是的,我知道,這也不是原地,但缺少重寫Sort
你不會找到這樣的解決方案。
Dim myList As New List<int>() { 8, 4, 6, 2, 1, 5, 3, 1, 7 }
Dim myRange = myList.GetRange(2,4)
myRange.Sort(yourComparer)
Dim i = 2;
For Each item in myRange
mylist(i) = item
i += 1
Next
如果你能找到一種方法來使用一些過濾工具,你可以使用list或linq方法。 以下是使用FindAll的示例。
genericList = genericList.FindAll(x => x.Field).OrderBy(y => y.Field).ToList();
您是否要求列表在此之后仍需要所有項目,或者您是否只處理訂購的子集? 如果是后者那么你可以使用常規的Linq來做到這一點 - 這樣的事情可能適合你。
IEnumerable<T> enumerable = GetTheListToWorkWith();
IEnumerable<T> sortedStuff = enumerable.Skip(startIndex).Take(endIndex).OrderBy(t => t.ValueToCompare);
但是,此方法不會更改原始列表 - 它只返回一個只有List的已排序部分的新IEnumerable。
作為備用(如果所有數據都需要保留在列表中,您可以刪除需要排序的子集,對其進行排序,然后將其重新附加到原始列表中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.