[英]Vb.net / C# - sort list/array starting from a mid point
有沒有一種簡單的方法可以對從特定值開始的列表進行排序?
ABCDEF
因此,我們可以從傳入的值“ C”開始
CDEFAB
我想優化一個時隙列表,最好從開始時間開始對順序進行排序,這樣就不需要遍歷所有不需要的時間。
您可以使用:
ArrayList.Sort(int index, int count, IEqualityComparer comparer)
此方法使用指定的比較器對ArrayList中的一系列元素進行排序。
參量
指數
類型:System.Int32要排序的范圍的從零開始的索引。
計數
類型:System.Int32
排序范圍的長度。
比較器
類型:System.Collections.IComparer比較元素時要使用的IComparer實現。
-要么-
一個空引用(在Visual Basic中為Nothing),以使用每個元素的IComparable實現。
此處有一個示例說明如何使用它。
如果您不知道如何實現平等比較器,也可以查看此帖子
更新:
從您的陣列中: ABCDEF
讓我們假設它在此對象中並被實例化:
List<string> array;
因此,您可以執行以下操作:
public List<string> foo(List<string> array, int i) {
array.Sort(i, array.size() - i, null);
List<string> aux = array.Skip(i).Take(array.Size() - i );
aux.AddRange(array.Take(i));
return aux;
}
您這樣稱呼它:
List<string myNewArray = foo(array, 2);
static void Main(string[] args)
{
char[] z = new char[] { 'B', 'C', 'F', 'A', 'D', 'E' };
Array.Sort(z);
char[] x,y;
Split<char>(z, 2, out x, out y);
char[] combined = y.Concat(x).ToArray ();
}
public static void Split<T>(T[] array, int index, out T[] first, out T[] second)
{
first = array.Take(index).ToArray();
second = array.Skip(index).ToArray();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.